我正在使用Matcher
类在Java中使用正则表达式
以下是我所拥有的描述:
我有多个用管道分隔的正则表达式。 我必须得到与其中一个正则表达式匹配的单词组。
这是pattern
变量:
private static Pattern pattern = Pattern.compile(
"^TDXF.*\\w+-(\\d+)(\\.\\d+)+_(\\d+\\.)+\\d+|^TD.{3}([0-9]).{4}$|^.*_.*-.*-([0-9]*)\\..*\\..*\\..*$");
,此方法用于返回与单词相关的组号。
private static String getGroup(String gp) {
String g= "";
if (gp== null) {
return g;
}
final Matcher matcher = pattern.matcher(gp);
if (matcher.matches()) {
g= matcher.group(1) != null ? matcher.group(1) : matcher.group(2);
}
return g;
}
我编写了一个单元测试来测试它是否适用于此字符串,例如:TD91160152
,但失败了。
@Test
public void testGroup() {
Assert.assertEquals("6", this.getStep("TD91160152"));
Assert.assertEquals("2", this.getStep("TDXF-tv-2.5.10.1_0.0.0.0"));
Assert.assertEquals("6", this.getStep("TD91160118_SF11043004"));
Assert.assertEquals("3", this.getStep("TDXF_sih-tv-3.4.12.1_7.21.3.1"));
Assert.assertEquals("5", this.getStep("TD20_sih-tv-5.2.20.1"));
Assert.assertEquals("5", this.getStep("TD30_sih-tv-5.15.8.1"));
}
TD91160152
匹配此模式^TD.{3}([0-9]).{4}$
,它应返回6
作为matcher.group(1)数字:see this demo
我不知道为什么它失败并返回null作为组号。 我认为这与正则表达式之间的重叠无关。
我试图删除其他模式,只放
private static Pattern pattern = Pattern.compile(
"^TD.{3}([0-9]).{4}$");
并且有效。.我不知道为什么当我添加另一个正则表达式时会返回null。
有人可以帮我吗? 非常感谢。
答案 0 :(得分:0)
答案 1 :(得分:0)
感谢所有花时间与我一起阅读和思考的人,以寻求解决方案。
希望我找到了解决方案。最后,我将模式和单词是否与模式匹配进行了测试。 (在使用迭代器|
时,可能会造成混乱)
private static Pattern p1 = Pattern.compile("^TDXF.*\\w+-(\\d+)(\\.\\d+)+_(\\d+\\.)+\\d+");
private static Pattern p2 = Pattern.compile("^TD.{3}([0-9]).{4}$");
private static Pattern p3 = Pattern.compile("^.*_.*-.*-([0-9]*)\\..*\\..*\\..*$");
private static String getGroup(String gp) {
String g = "";
if (gp== null) {
return g;
}
final Matcher matcher1 = p1.matcher(gp);
final Matcher matcher2 = p2.matcher(gp);
final Matcher matcher3 = p3.matcher(gp);
if (matcher1.matches()) {
g= matcher1.group(1) != null ? matcher1.group(1) : matcher1.group(2);
}
if (matcher2.matches()) {
g= matcher2.group(1) != null ? matcher2.group(1) : matcher2.group(2);
}
if (matcher3.matches()) {
g= matcher3.group(1) != null ? matcher3.group(1) : matcher3.group(2);
}
return g;
}
答案 2 :(得分:0)
值TD91160152
与您的正则表达式的第二部分匹配,但该组是总正则表达式中的第四组。因此,您需要使用getGroup(4)
来获取6
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Ff {
static String part1="^TDXF.*\\w+-(\\d+)(\\.\\d+)+_(\\d+\\.)+\\d+$";
static String part2 = "^TD.{3}([0-9]).{4}$";
static String part3 = "^.*_.*-.*-([0-9]*)\\..*\\..*\\..*$";
private static Pattern pattern = Pattern.compile(part1+"|"+part2+"|"+part3);
public static void main(String args[]) {
Matcher m=pattern.matcher("TD98760452");
if(m.matches())
{
for (int i=1;i<=m.groupCount();i++)
System.out.println(m.group(i));
}
}
}
输出为
null
null
null
6
null