我有一个字符串,其分隔符如“|”
e.g. "South NY, US | South-East NY, US| North NY, US"
注意:任何一侧管道周围的空间可能会也可能不会出现。
我一直在尝试使用.contains()来匹配给定的字符串,但它也匹配“East NY,US”这样的情况
我有一个小函数(在java中)来匹配搜索字符串,但效率很低。
boolean fullmatch (String search, String text) {
String[] split = text.split ("\\|");
for (int i = 0; i < split.length; i++) {
if (split[i].trim().equals (search)) {
return true;
}
}
return false;
}
这个等价的正则表达式是什么?谢谢你
附加:SQL中的等效正则表达式也是什么? (尽量不要在Java中提取大量数据进行比较)
答案 0 :(得分:4)
我怀疑你的方法效率太低,或者你可以提高效率;但是为了更简洁和更简单的代码(也会至少表现得更好),你可以写:
boolean fullmatch (String search, String text) {
return Pattern.compile(
"(?:^|\\|)\\s*" + Pattern.quote(search) + "\\s*(?:\\||$)")
.matcher(text).find();
}
例如,如果您的search
为"South-East NY, US"
,则如果text
包含匹配(?:^|\|)\s*South-East NY, US\s*(?:\||$)
的子字符串(字符串开头或 - ),则上述内容将返回true管道,加上可选的空格,加上搜索字符串,加上可选的空格,加上管道或字符串结尾)。
答案 1 :(得分:0)
试试这个:
boolean fullmatch (String search, String text) {
return text.matches(".*(^|\\|)\\s*" + search + "\\s*(\\||$).*");
}