求一个正则表达式

tjzero_sapce 2017-08-21 03:28:55
现在有一个字符串“关于提示“15五洋债”及“15五洋02”有关风险的受托管理事务报告”。想要获取第一个双引号中的15五洋债,正则表达式该怎么写呢?各位大侠
...全文
50267 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
tjzero_sapce 2017-08-23
  • 打赏
  • 举报
回复
引用 21 楼 chb345536638 的回复:

Pattern r = Pattern.compile("[^“]*“([^”]*)”.*");
        Matcher m = r.matcher("关于提示“15五洋债”及“15五洋02”有关风险的受托管理事务报告");
        
        if (m.matches()) {
            System.out.println(m.group(1));
        }
感谢 解决问题了
tjzero_sapce 2017-08-22
  • 打赏
  • 举报
回复
引用 18 楼 shpery 的回复:
[quote=引用 12 楼 tjzero_sapce 的回复:] [quote=引用 11 楼 tjzero_sapce 的回复:] [quote=引用 10 楼 shpery 的回复:] [quote=引用 9 楼 tjzero_sapce 的回复:] [quote=引用 8 楼 shpery 的回复:] [quote=引用 7 楼 tjzero_sapce 的回复:] [quote=引用 6 楼 shpery 的回复:] [quote=引用 5 楼 tjzero_sapce 的回复:] 没有人回复自己顶一个
2L的你把while改成if就可以了... find()方法是部分匹配,是查找输入串中与模式匹配的子串. matches()是全部匹配,是将整个输入串与模式匹配.[/quote] 是呀 我现在就是缺一个全部匹配的正则,我写的这个不对呀! Pattern r = Pattern.compile("^.*?“(.*)?”.*"); [/quote]
String reg = "(.*)(“.*”)(.*)";
[/quote]按照你给的正则,
Pattern r = Pattern.compile("(.*)(“.*”)(.*)");
		Matcher m = r.matcher("关于提示“15五洋债”及“15五洋02”有关风险的受托管理事务报告");
		if (m.matches()) {
			System.out.println(m.group(1));
		}
print了“关于提示“15五洋债”及”[/quote] 总算理解你的意思了
String reg = "(.*“)(.*)(”.*”)(.*)";
if (m.matches()) {
            System.out.println(m.group(2));
        }
[/quote] 成功了 要是在
Pattern r = Pattern.compile(".*?“(.+?).+?”.*");
这个基础上改呢?好改不[/quote] 因为有的title里面只会出现一对“”[/quote]
String reg = "(.*“)(.*)(”|.*”)(.*)";
if (m.matches()) {
            System.out.println(m.group(2));
        }
[/quote]
public static void main(String[] args) {
		Pattern r = Pattern.compile("(.*“)(.*)(”|.*”)(.*)");
		Matcher m = r.matcher("关于提示“15五洋债”及“15五洋02”有关风险的受托管理事务报告");
		if (m.matches()) {
			System.out.println(m.group(2));
		}
	}
取到的是15五洋02
shpery 2017-08-22
  • 打赏
  • 举报
回复
引用 12 楼 tjzero_sapce 的回复:
[quote=引用 11 楼 tjzero_sapce 的回复:] [quote=引用 10 楼 shpery 的回复:] [quote=引用 9 楼 tjzero_sapce 的回复:] [quote=引用 8 楼 shpery 的回复:] [quote=引用 7 楼 tjzero_sapce 的回复:] [quote=引用 6 楼 shpery 的回复:] [quote=引用 5 楼 tjzero_sapce 的回复:] 没有人回复自己顶一个
2L的你把while改成if就可以了... find()方法是部分匹配,是查找输入串中与模式匹配的子串. matches()是全部匹配,是将整个输入串与模式匹配.[/quote] 是呀 我现在就是缺一个全部匹配的正则,我写的这个不对呀! Pattern r = Pattern.compile("^.*?“(.*)?”.*"); [/quote]
String reg = "(.*)(“.*”)(.*)";
[/quote]按照你给的正则,
Pattern r = Pattern.compile("(.*)(“.*”)(.*)");
		Matcher m = r.matcher("关于提示“15五洋债”及“15五洋02”有关风险的受托管理事务报告");
		if (m.matches()) {
			System.out.println(m.group(1));
		}
print了“关于提示“15五洋债”及”[/quote] 总算理解你的意思了
String reg = "(.*“)(.*)(”.*”)(.*)";
if (m.matches()) {
            System.out.println(m.group(2));
        }
[/quote] 成功了 要是在
Pattern r = Pattern.compile(".*?“(.+?).+?”.*");
这个基础上改呢?好改不[/quote] 因为有的title里面只会出现一对“”[/quote]
String reg = "(.*“)(.*)(”|.*”)(.*)";
if (m.matches()) {
            System.out.println(m.group(2));
        }
tjzero_sapce 2017-08-22
  • 打赏
  • 举报
回复
测试案例
"关于提示“15五洋债”及“15五洋02”有关风险的受托管理事务报告"、"关于2017年第二次“15五洋债”、“15五洋02”债券持有人会议网络投票流程的说明"、"关于“15五洋02”违约的临时受托管理事务报告"、"关于征集“15五洋02”债券持有人授权的临时受托管理事务报告"、"关于召开2017年第二次“15五洋02”(证券代码:122454.sh)债券持有人会议的通知"、"关于“15五洋02”交叉违约风险及后续救济途径的临时受托管理事务报告"
Pattern r = Pattern.compile(".*?“(.*)?”.*");
		Matcher m1 = r.matcher(title);
		String bondName = "";
		if (m1.matches()) {
			bondName = m1.group(1);
		}
哪位帮忙修改下 Pattern.compile(".*?“(.*)?”.*"); 就是我想要的答案
tjzero_sapce 2017-08-22
  • 打赏
  • 举报
回复
引用 15 楼 phantom7493 的回复:
[quote=引用 14 楼 tjzero_sapce 的回复:] 有可能是“关于提示“15五洋债”有关风险的受托管理事务报告”,所以不想在正则中写死 一定有两对 “”
[/quote]好好 ,可以写成m.matches()能全部匹配的正则吗?其实我需要这个
  • 打赏
  • 举报
回复

Pattern r = Pattern.compile("[^“]*“([^”]*)”.*");
        Matcher m = r.matcher("关于提示“15五洋债”及“15五洋02”有关风险的受托管理事务报告");
        
        if (m.matches()) {
            System.out.println(m.group(1));
        }
tjzero_sapce 2017-08-22
  • 打赏
  • 举报
回复
自己再顶一个
wautsns 2017-08-21
  • 打赏
  • 举报
回复
引用 14 楼 tjzero_sapce 的回复:
有可能是“关于提示“15五洋债”有关风险的受托管理事务报告”,所以不想在正则中写死 一定有两对 “”

tjzero_sapce 2017-08-21
  • 打赏
  • 举报
回复
引用 13 楼 sunbei2581 的回复:
Pattern r = Pattern.compile("(.*)(“.*”)(.*)(“.*”)(.*)"); Matcher m = r.matcher("关于提示“15五洋债”及“15五洋02”有关风险的受托管理事务报告"); if (m.matches()) { System.out.println(m.group(2)); } “15五洋债”
有可能是“关于提示“15五洋债”有关风险的受托管理事务报告”,所以不想在正则中写死 一定有两对 “”
sunbei2581 2017-08-21
  • 打赏
  • 举报
回复
Pattern r = Pattern.compile("(.*)(“.*”)(.*)(“.*”)(.*)"); Matcher m = r.matcher("关于提示“15五洋债”及“15五洋02”有关风险的受托管理事务报告"); if (m.matches()) { System.out.println(m.group(2)); } “15五洋债”
tjzero_sapce 2017-08-21
  • 打赏
  • 举报
回复
引用 11 楼 tjzero_sapce 的回复:
[quote=引用 10 楼 shpery 的回复:] [quote=引用 9 楼 tjzero_sapce 的回复:] [quote=引用 8 楼 shpery 的回复:] [quote=引用 7 楼 tjzero_sapce 的回复:] [quote=引用 6 楼 shpery 的回复:] [quote=引用 5 楼 tjzero_sapce 的回复:] 没有人回复自己顶一个
2L的你把while改成if就可以了... find()方法是部分匹配,是查找输入串中与模式匹配的子串. matches()是全部匹配,是将整个输入串与模式匹配.[/quote] 是呀 我现在就是缺一个全部匹配的正则,我写的这个不对呀! Pattern r = Pattern.compile("^.*?“(.*)?”.*"); [/quote]
String reg = "(.*)(“.*”)(.*)";
[/quote]按照你给的正则,
Pattern r = Pattern.compile("(.*)(“.*”)(.*)");
		Matcher m = r.matcher("关于提示“15五洋债”及“15五洋02”有关风险的受托管理事务报告");
		if (m.matches()) {
			System.out.println(m.group(1));
		}
print了“关于提示“15五洋债”及”[/quote] 总算理解你的意思了
String reg = "(.*“)(.*)(”.*”)(.*)";
if (m.matches()) {
            System.out.println(m.group(2));
        }
[/quote] 成功了 要是在
Pattern r = Pattern.compile(".*?“(.+?).+?”.*");
这个基础上改呢?好改不[/quote] 因为有的title里面只会出现一对“”
tjzero_sapce 2017-08-21
  • 打赏
  • 举报
回复
引用 10 楼 shpery 的回复:
[quote=引用 9 楼 tjzero_sapce 的回复:] [quote=引用 8 楼 shpery 的回复:] [quote=引用 7 楼 tjzero_sapce 的回复:] [quote=引用 6 楼 shpery 的回复:] [quote=引用 5 楼 tjzero_sapce 的回复:] 没有人回复自己顶一个
2L的你把while改成if就可以了... find()方法是部分匹配,是查找输入串中与模式匹配的子串. matches()是全部匹配,是将整个输入串与模式匹配.[/quote] 是呀 我现在就是缺一个全部匹配的正则,我写的这个不对呀! Pattern r = Pattern.compile("^.*?“(.*)?”.*"); [/quote]
String reg = "(.*)(“.*”)(.*)";
[/quote]按照你给的正则,
Pattern r = Pattern.compile("(.*)(“.*”)(.*)");
		Matcher m = r.matcher("关于提示“15五洋债”及“15五洋02”有关风险的受托管理事务报告");
		if (m.matches()) {
			System.out.println(m.group(1));
		}
print了“关于提示“15五洋债”及”[/quote] 总算理解你的意思了
String reg = "(.*“)(.*)(”.*”)(.*)";
if (m.matches()) {
            System.out.println(m.group(2));
        }
[/quote] 成功了 要是在
Pattern r = Pattern.compile(".*?“(.+?).+?”.*");
这个基础上改呢?好改不
shpery 2017-08-21
  • 打赏
  • 举报
回复
引用 9 楼 tjzero_sapce 的回复:
[quote=引用 8 楼 shpery 的回复:] [quote=引用 7 楼 tjzero_sapce 的回复:] [quote=引用 6 楼 shpery 的回复:] [quote=引用 5 楼 tjzero_sapce 的回复:] 没有人回复自己顶一个
2L的你把while改成if就可以了... find()方法是部分匹配,是查找输入串中与模式匹配的子串. matches()是全部匹配,是将整个输入串与模式匹配.[/quote] 是呀 我现在就是缺一个全部匹配的正则,我写的这个不对呀! Pattern r = Pattern.compile("^.*?“(.*)?”.*"); [/quote]
String reg = "(.*)(“.*”)(.*)";
[/quote]按照你给的正则,
Pattern r = Pattern.compile("(.*)(“.*”)(.*)");
		Matcher m = r.matcher("关于提示“15五洋债”及“15五洋02”有关风险的受托管理事务报告");
		if (m.matches()) {
			System.out.println(m.group(1));
		}
print了“关于提示“15五洋债”及”[/quote] 总算理解你的意思了
String reg = "(.*“)(.*)(”.*”)(.*)";
if (m.matches()) {
            System.out.println(m.group(2));
        }
tjzero_sapce 2017-08-21
  • 打赏
  • 举报
回复
引用 8 楼 shpery 的回复:
[quote=引用 7 楼 tjzero_sapce 的回复:] [quote=引用 6 楼 shpery 的回复:] [quote=引用 5 楼 tjzero_sapce 的回复:] 没有人回复自己顶一个
2L的你把while改成if就可以了... find()方法是部分匹配,是查找输入串中与模式匹配的子串. matches()是全部匹配,是将整个输入串与模式匹配.[/quote] 是呀 我现在就是缺一个全部匹配的正则,我写的这个不对呀! Pattern r = Pattern.compile("^.*?“(.*)?”.*"); [/quote]
String reg = "(.*)(“.*”)(.*)";
[/quote]按照你给的正则,
Pattern r = Pattern.compile("(.*)(“.*”)(.*)");
		Matcher m = r.matcher("关于提示“15五洋债”及“15五洋02”有关风险的受托管理事务报告");
		if (m.matches()) {
			System.out.println(m.group(1));
		}
print了“关于提示“15五洋债”及
shpery 2017-08-21
  • 打赏
  • 举报
回复
引用 7 楼 tjzero_sapce 的回复:
[quote=引用 6 楼 shpery 的回复:] [quote=引用 5 楼 tjzero_sapce 的回复:] 没有人回复自己顶一个
2L的你把while改成if就可以了... find()方法是部分匹配,是查找输入串中与模式匹配的子串. matches()是全部匹配,是将整个输入串与模式匹配.[/quote] 是呀 我现在就是缺一个全部匹配的正则,我写的这个不对呀! Pattern r = Pattern.compile("^.*?“(.*)?”.*"); [/quote]
String reg = "(.*)(“.*”)(.*)";
tjzero_sapce 2017-08-21
  • 打赏
  • 举报
回复
引用 6 楼 shpery 的回复:
[quote=引用 5 楼 tjzero_sapce 的回复:] 没有人回复自己顶一个
2L的你把while改成if就可以了... find()方法是部分匹配,是查找输入串中与模式匹配的子串. matches()是全部匹配,是将整个输入串与模式匹配.[/quote] 是呀 我现在就是缺一个全部匹配的正则,我写的这个不对呀! Pattern r = Pattern.compile("^.*?“(.*)?”.*");
shpery 2017-08-21
  • 打赏
  • 举报
回复
引用 5 楼 tjzero_sapce 的回复:
没有人回复自己顶一个
2L的你把while改成if就可以了... find()方法是部分匹配,是查找输入串中与模式匹配的子串. matches()是全部匹配,是将整个输入串与模式匹配.
tjzero_sapce 2017-08-21
  • 打赏
  • 举报
回复
没有人回复自己顶一个
tjzero_sapce 2017-08-21
  • 打赏
  • 举报
回复
引用 2 楼 mmqw1122 的回复:
String str="关于提示“15五洋债”及“15五洋02”有关风险的受托管理事务报告";
		String reg="“(.*?)”";
		Pattern pattern = Pattern.compile(reg);
		Matcher matcher = pattern.matcher(str);
		while (matcher.find())
		{
			String src = matcher.group(1);
			System.out.println(src);
		}
只要 15五洋债 就只提取第一个
你的没问题,我想用的是
public static void main(String[] args) {
		Pattern r = Pattern.compile(".*?“(.+?).+?”.*");
		Matcher m = r.matcher("关于提示“15五洋债”及“15五洋02”有关风险的受托管理事务报告");
		if (m.matches()) {
			System.out.println(m.group(1));
		}
	}
m.matches()
m.matches()的使用你的正则就匹配不上了
tjzero_sapce 2017-08-21
  • 打赏
  • 举报
回复
引用 1 楼 shpery 的回复:
你直接获取第一个双引号“”的位置,然后截取就可以了吧
int m = s.indexOf("“");
		int n = s.indexOf("”");System.out.println(s.substring(m+1, n));
忘了说了。。。其实我想要用正则解决。
加载更多回复(2)

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧