分组正则表达式

时间:2017-01-16 13:12:03

标签: java regex

以下是我的问题:

我有一个非常长的字符串,其中有很多值由不同的标签限定。这些值包括中文,英文措辞和数字。

我想通过指定模式分开。以下是一个例子: (我想找到一个模式xxxxxx,其中xxxx是中文,英文,数字或任何符号但不包括"<"或">"因为这两个符号用于识别标签)

然而,我发现这些模式有些奇怪。模式似乎没有重新标记前两个标记(),而第二个标记

String a = "<f\"number\">4  <f\"number\"><f$n0>14   <h85><f$n0>4    <f$n0>2 <f$n0>2 7   -<f\"Times-Roman\">7<f\"number\">";
Pattern p = Pattern.compile("<f\"number\">[\\P{sc=Han}*\\p{sc=Han}*[a-z]*[A-Z]*[0-9]*^<>]*<f\"number\">");
Matcher m = p.matcher(a);

while(m.find()){
    System.out.println(m.group());
}

输出与我的String a

相同

1 个答案:

答案 0 :(得分:2)

字符类[\\P{sc=Han}*\\p{sc=Han}*[a-z]*[A-Z]*[0-9]*^<>]*匹配0个或更多字符,因为\\P{sc=Han}\\p{sc=Han}相反。

我想你想要:

Pattern p = Pattern.compile("<f\"number\">[\\P{sc=Han}a-zA-Z0-9]*<f\"number\">");

您可能想要添加空格:

Pattern p = Pattern.compile("<f\"number\">[\\P{sc=Han}a-zA-Z0-9\s]*<f\"number\">");

或:

Pattern p = Pattern.compile("<f\"number\">[^<]*<f\"number\">");