正则表达式取数的问题

Evenque 2014-07-24 02:19:28
字符串:a=123, b=AB, c=[1, 2, 3], d=456

写正则表达式可以获取 123、AB、[123]的值,说白了就是获取a=,b=,c=后面的属性值。

平时写正则:
Pattern pattern2 = Pattern.compile("=.*?[,]\\s[^0-9]");
Matcher matcher2 = pattern2.matcher(LogLine1);
while(matcher2.find())
System.out.println(matcher2.group());
只能拿出:
=123, b
=AB, c
=[1,2,3], d
=456
这样的匹配结果,中间还是带了=号和逗号。

可以不可用正则表达式匹配后,直接拿中间某段值?
...全文
251 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Evenque 2014-07-24
  • 打赏
  • 举报
回复
		System.out.println("--------------------------------------");
		Pattern pattern4 = Pattern.compile("([\\d\\w]+)=([\\d\\w\u4e00-\u9fa5]+|\\[.*?\\])");
        Matcher matcher4 = pattern4.matcher(LogLine1);
        while(matcher4.find()) {
        	System.out.print(matcher4.group(1) + "\t");
        	System.out.println(matcher4.group(2));
        }
新版,可以拿属性名,也可以拿属性值
Evenque 2014-07-24
  • 打赏
  • 举报
回复
引用 7 楼 rui888 的回复:
[quote=引用 5 楼 Evenque 的回复:] [quote=引用 3 楼 rui888 的回复:] Pattern pattern2 = Pattern.compile("=([\\d\\w\u4e00-\u9fa5]+|\\[.*?\\])");
非常感谢。 看了下您的代码,原来差在:matcher.group(index)这个函数的用法。 原来在正则表达式里面加了()这样的括号后,就可以用matcher.group(1)获取第一个括号里面的内容了。 如果用matcher.group(),得到的是整个匹配的字符串。 我自己也写了个:
		System.out.println("--------------------------------------");
		Pattern pattern2 = Pattern.compile("=(.*?)[,]\\s+[^0-9]");
		Matcher matcher2 = pattern2.matcher(LogLine1);
		while(matcher2.find()){
			System.out.println(matcher2.group(1));
		}
[/quote] d=456 是不是也要匹配。[/quote] 是的,所以我那个有问题。刚开始想通过它来spilt呢,要匹配的话有问题。
tony4geek 2014-07-24
  • 打赏
  • 举报
回复
引用 5 楼 Evenque 的回复:
[quote=引用 3 楼 rui888 的回复:] Pattern pattern2 = Pattern.compile("=([\\d\\w\u4e00-\u9fa5]+|\\[.*?\\])");
非常感谢。 看了下您的代码,原来差在:matcher.group(index)这个函数的用法。 原来在正则表达式里面加了()这样的括号后,就可以用matcher.group(1)获取第一个括号里面的内容了。 如果用matcher.group(),得到的是整个匹配的字符串。 我自己也写了个:
		System.out.println("--------------------------------------");
		Pattern pattern2 = Pattern.compile("=(.*?)[,]\\s+[^0-9]");
		Matcher matcher2 = pattern2.matcher(LogLine1);
		while(matcher2.find()){
			System.out.println(matcher2.group(1));
		}
[/quote] d=456 是不是也要匹配。
Evenque 2014-07-24
  • 打赏
  • 举报
回复
引用 3 楼 rui888 的回复:
Pattern pattern2 = Pattern.compile("=([\\d\\w\u4e00-\u9fa5]+|\\[.*?\\])");
您这个: Pattern.compile("=([\\d\\w\u4e00-\u9fa5]+|\\[.*?\\])"); 比我的: Pattern.compile("=(.*?)[,]\\s+[^0-9]"); 好很多。
Evenque 2014-07-24
  • 打赏
  • 举报
回复
引用 3 楼 rui888 的回复:
Pattern pattern2 = Pattern.compile("=([\\d\\w\u4e00-\u9fa5]+|\\[.*?\\])");
非常感谢。 看了下您的代码,原来差在:matcher.group(index)这个函数的用法。 原来在正则表达式里面加了()这样的括号后,就可以用matcher.group(1)获取第一个括号里面的内容了。 如果用matcher.group(),得到的是整个匹配的字符串。 我自己也写了个:
		System.out.println("--------------------------------------");
		Pattern pattern2 = Pattern.compile("=(.*?)[,]\\s+[^0-9]");
		Matcher matcher2 = pattern2.matcher(LogLine1);
		while(matcher2.find()){
			System.out.println(matcher2.group(1));
		}
tony4geek 2014-07-24
  • 打赏
  • 举报
回复
tony4geek 2014-07-24
  • 打赏
  • 举报
回复
Pattern pattern2 = Pattern.compile("=([\\d\\w\u4e00-\u9fa5]+|\\[.*?\\])");
Evenque 2014-07-24
  • 打赏
  • 举报
回复
引用 1 楼 rui888 的回复:
String  LogLine1="a=123, b=AB, c=[1, 2, 3], d=456";
		Pattern pattern2 = Pattern.compile("=([\\d\\w]+|\\[.*?\\])");
		Matcher matcher2 = pattern2.matcher(LogLine1);
		while(matcher2.find())
		System.out.println(matcher2.group(1));
哈,非常感谢。 还有个小要求,如何支持属性值为中文? 比如: a=中国, b=123, c=[1, 2, 3], d=AB
tony4geek 2014-07-24
  • 打赏
  • 举报
回复
String  LogLine1="a=123, b=AB, c=[1, 2, 3], d=456";
		Pattern pattern2 = Pattern.compile("=([\\d\\w]+|\\[.*?\\])");
		Matcher matcher2 = pattern2.matcher(LogLine1);
		while(matcher2.find())
		System.out.println(matcher2.group(1));

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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