我有这个正则表达式来查找字符串中的整数(换行符)。但是,我想要过滤掉这个。我希望正则表达式找到某些行中的数字,而不是其他行。
字符串:
String test= "ytrt.ytrwyt.ytreytre.test1,0,2,0"
+"sfgtr.ytyer.qdfre.uyeyrt.test2,0,8,0"
+"sfgtr.ytyer.qdfre.uyeyrt.test3,0,3,0";
pattern = "(?<=,)\\d+";
pr = Pattern.compile(pattern);
match = pr.matcher(test);
System.out.println();
if (match.find()) {
System.out.println("Found: " + match.group());
}
这个正则表达式在逗号后面找到所有行的整数。如果我想要一个特定的正则表达式来找到包含&#34; test1&#34;,&#34; test2&#34;和&#34; test3&#34;的行中的整数。我该怎么做?我想创建三个不同的正则表达式,但我的正则表达式技能很弱。
第一个正则表达式应该打印出2.第二个8和第三个3.
答案 0 :(得分:1)
您可以展开自己的模式,将test[123]
包含在后备广告中,该广告将与test1
,test2
或test3
匹配:
String pattern = "(?<=test[123][^,]{0,100},[^,]{1,100},)\\d+";
Pattern pr = Pattern.compile(pattern);
Matcher match = pr.matcher(test);
System.out.println();
while (match.find()) {
System.out.println("Found: " + match.group());
}
,[^,]
部分滑动了testN
后面两个逗号之间的所有内容。
我使用{0,100}
代替*
和{1,100}
代替+
内部表达式,因为Java正则表达式引擎要求lookbehinds具有预定义的限制他们的长度。如果您需要允许跳过超过100个字符,请相应地调整最大长度。
答案 1 :(得分:0)
您可以使用以下Pattern
并循环:
String test= "ytrt.ytrwyt.ytreytre.test1,0,2,0"
+ System.getProperty("line.separator")
+"sfgtr.ytyer.qdfre.uyeyrt.test2,0,8,0"
+ System.getProperty("line.separator")
+"sfgtr.ytyer.qdfre.uyeyrt.test3,0,3,0";
// | "test" literal
// | | any number of digits
// | | | comma
// | | | any number of digits
// | | | | comma
// | | | | | group1, your digits
Pattern p = Pattern.compile("test\\d+,\\d+,(\\d+)");
Matcher m = p.matcher(test);
while (m.find()) {
// prints back-reference to group 1
System.out.printf("Found: %s%n", m.group(1));
}
<强>输出强>
Found: 2
Found: 8
Found: 3
答案 2 :(得分:0)
您还可以使用捕获组从字符串中提取测试编号和其他编号:
String pattern = "test([123]),\\d+,(\\d+),";
...
while (match.find()) {
// get and parse the number after "test" (first capturing group)
int testNo = Integer.parseInt(match.group(1));
// get and parse the number you wanted to extract (second capturing group)
int num = Integer.parseInt(match.group(2));
System.out.println("test"+testNo+": " + num);
}
打印
test1: 2
test2: 8
test3: 3
注意:在此示例中,解析字符串仅用于演示目的,但如果您想对数字执行某些操作(例如将它们存储在数组中),则可能很有用。
更新:如果您还希望匹配"ytrt.ytrwyt.test1.ytrwyt,0,2,0"
等字符串,可以将pattern
更改为"test([123])\\D*,\\d+,(\\d+),"
,以允许任意数量的非数字跟随{ {1}},test1
或test2
(以逗号分隔的整数之前)。