我有这个正则表达式,它应该删除句子定界符(.
和 ?
):
sentence = sentence.replaceAll("\\.|\\?$","");
转换效果很好
“我是 Java 开发人员。”
到 “我是 Java 开发人员”
“我是 Java 开发人员吗?”
到 “我是 Java 开发人员吗”
但在部署之后我们发现它也将句子中的任何其他点替换为
“您好,我是 Java 开发人员吗?”
变为 “您好,我是 Java 开发人员”
为什么会这样?
最佳答案
pipe (|
) 在所有运算符中具有最低的优先级。所以你的正则表达式:
\\.|\\?$
被视为:
(\\.)|(\\?$)
匹配字符串中的 .
anywhere 并匹配字符串 end 处的 ?
。
要解决此问题,您需要将 .
和 ?
分组为:
(?:\\.|\\?)$
您还可以使用:
[.?]$
在字符类 .
和 ?
中按字面处理,因此您无需转义它们。
关于java - 简单的 Java 正则表达式不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4041266/