java - 简单的 Java 正则表达式不起作用

标签 java regex string operators operator-precedence

我有这个正则表达式,它应该删除句子定界符(.?):

sentence = sentence.replaceAll("\\.|\\?$","");

转换效果很好

“我是 Java 开发人员。”“我是 Java 开发人员”

“我是 Java 开发人员吗?”“我是 Java 开发人员吗”

但在部署之后我们发现它也将句子中的任何其他点替换为

“您好,我是 Java 开发人员吗?” 变为 “您好,我是 Java 开发人员”

为什么会这样?

最佳答案

pipe (|) 在所有运算符中具有最低的优先级。所以你的正则表达式:

\\.|\\?$

被视为:

(\\.)|(\\?$)

匹配字符串中的 . anywhere 并匹配字符串 end 处的 ?

要解决此问题,您需要将 .? 分组为:

(?:\\.|\\?)$

您还可以使用:

[.?]$

在字符类 .? 中按字面处理,因此您无需转义它们。

关于java - 简单的 Java 正则表达式不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4041266/

相关文章:

python - 如何在 Python 变量赋值中考虑字符串格式?

java - Iterator.hasNext() 在从集合中移除() 之后变得疯狂

java - 清洁架构 : How to reflect the data layer's changes in the UI

java - 这是逻辑错误还是其他什么?

java - ForkJoinPool 类的 execute() 方法

java - 在 Java 正则表达式中使用 "<"

python - Regex Python - 只保留 ASCII 和版权符号

python - 使用正则表达式在网页中查找电子邮件地址

java - 嵌套循环的第一个 while 循环只迭代一次

string - R中用空格分割不均匀字符串