我想使用正则表达式来实现两个目标:仅当字符串是完整的单词时匹配字符串(不匹配“contact”内部的“on”),并匹配以逗号或句点结尾的字符串。
这是一个例子。它意味着在str中找到字符串(str2)并用括号括起的相同字符串替换它。
while(scan2.hasNext()) {
String str2 = scan2.next();
str = str.replaceAll("\\b" + str2 + "\\b", "(" + str2 + ")");
}
它确实避免匹配单词中的字符串,但它会忽略以逗号或句号结尾的字符串。
我该怎么做?
答案 0 :(得分:2)
public class Main {
public static void main(String[] args) {
System.out.println(replace("upon contact", "on"));
System.out.println(replace("upon contact,", "contact"));
System.out.println(replace("upon contact", "contact"));
}
private static String replace(String s1, String s2) {
return s1.replaceAll(String.format("\\b(%s)\\b(?=[.,])", s2), "\\($1\\)");
}
}
联系时//仅匹配完整的单词
on(contact),//替换匹配(匹配)
联系时//仅匹配,如果结束,或。
答案 1 :(得分:0)
以下正则表达式匹配以逗号/句点结尾的字符串或由单个完整单词组成的字符串:
(?s)(^(?<A>\b\w+\b)$)|((?s)^(?<B>.+(?<=[,.]))$)
有关更多说明,另请参阅https://regex101.com/r/E78rQV/1/。
答案 2 :(得分:-1)
我冒昧地添加感叹号和问号。 括号表示它将匹配括号内的任何字符。
str = str.replaceAll("\\b" + str2 + "[\\b.,!?]", "(" + str2 + ")");