我在公式化正则表达式字符串以匹配“-“或数组[ _-.]中的任何字符时遇到了麻烦。|[ _-.])
我的Java测试程序:
cutAddressStreet("strassen name 1344"); // "strassen name" ok
cutAddressStreet("strassen name-1344"); // "strassen name" ok
cutAddressStreet("strassen name - 1344"); // "strassen name -" <- Problem
cutAddressStreet("strassen name,1344"); // "" ok
public static String cutAddressStreet(String sFull)
{
String sRet = "";
String sRegEx = "^(.*)( - |[ _\\-\\.])(\\d{1,5})(.*)$";
if (sFull.matches(sRegEx))
{ // Yes , this is Street with Number
String sStreet = sFull.replaceFirst(sRegEx, "$1");
System.out.println("cut=\"" + sStreet + "\" from " + sFull);
sRet = sStreet;
}
return sRet;
}
1条答案
按热度按时间vfh0ocws1#
如果只替换为捕获组1,则模式中不需要3个捕获组。第一个
.*
匹配整个字符串,因此其中一个捕获组应该是非贪婪的。字符类中的
-
可以放在末尾,这样你就不必转义它,也不必转义字符类中的点.在代码中,您可以直接使用
return sStreet;
,而不是先覆盖字符串sRet
。代码的输出: