JAVA正则表达式与空间

时间:2014-03-17 10:00:54

标签: java regex

我遇到以下表达式的问题:

String REGEX_Miasto_Dwu_Czlonowe="\D+\s\D+";

Pattern pat_Miasto = Pattern.compile(REGEX_Miasto_Dwu_Czlonowe);
Matcher mat_Miasto_Dwu_Czlonowe = pat_Miasto.matcher(adres);

因为上述模式匹配

"80-227 GDAŃSK                              DOSTUDZIENKI 666";
 "83000  PRUSZCZ GDANSKI                     UL. TYSIACLECIA 666"; 

但它只应匹配此表达式:"PRUSZCZ GDANSKI UL. TYSIACLECIA 666";

THX寻求帮助。

2 个答案:

答案 0 :(得分:0)

你的regexp遇到了一些问题。

  1. 首先你必须将所有反斜杠更改为双反斜杠,但是如果你有匹配则可能是复制和粘贴错误
  2. \ D匹配非数字。这是你的意图吗?

    \ d + \ S \ d +

  3. Regular expression visualization

    Debuggex Demo

    因此,您匹配某些非数字,然后是一个空格,然后是一些非数字

    我认为你的表达式匹配的事件或多或少。

    这可能是你的正则表达式的解决方案:

    ^\d+\D+\d+$
    

    Regular expression visualization

    Debuggex Demo

    如果您希望将第二行与文字匹配,那么只有这一行匹配才能使用:

    Matcher.quoteReplacement(String s)
    

    从简单的String构建这种表达式。所有控制角色都可以逃脱。

答案 1 :(得分:0)

您的正则表达式匹配任意数量的非数字\D+空格\s,然后是任意数量的非数字。所以它匹配第一个字符串:

80-227 GDAŃSK                              DOSTUDZIENKI 666
//    ^__________\D+_________^^____________\D+_________^
//                           |
//                         a space

我想你想要:

[^\s\d]+\s[^\s\d]+

任意数量的非空格/非数字,一个空格,然后是任意数量的非空格/非数字。