这是我的问题:
我有一个很长的字符串,其中包含由不同标签限定的许多值。这些值包括中文,英文字词和数字。
我想按指定模式分开。以下是一个示例:
(我想找到一种模式xxxxxx,其中xxxx是中文,英语,数字或任何符号,但不包括“ ”,因为这两个符号用于标识标签)
但是,我发现这些模式有些奇怪。模式似乎没有重新定义前两个tag(),但第二个
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相同
最佳答案
字符类[\\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\">");