使用正则表达式匹配以逗号结尾但不在另一个单词中的单词

时间:2017-08-14 23:17:52

标签: java regex

我想使用正则表达式来实现两个目标:仅当字符串是完整的单词时匹配字符串(不匹配“contact”内部的“on”),并匹配以逗号或句点结尾的字符串。

这是一个例子。它意味着在str中找到字符串(str2)并用括号括起的相同字符串替换它。

while(scan2.hasNext()) {
    String str2 = scan2.next();
    str = str.replaceAll("\\b" + str2 + "\\b", "(" + str2 + ")");
}

它确实避免匹配单词中的字符串,但它会忽略以逗号或句号结尾的字符串。

我该怎么做?

3 个答案:

答案 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 + ")");