Java中存在的正则表达式替换操作

3

IS:

String: "DARTH WEDR DR MRS"
Regex: "(.*?DR)\\s(-|MRS?|MI?SS?)?$"

这个正则表达式操作不能删除MRS,只能保留DR。 enter image description here
String: "DARTH WEDR DR MRS".replaceAll("(.*?DR)\\s(-|MRS?|MI?SS?)?$", "");
Output: "DARTH WEDR DR"

缩写通常出现在结尾,但有些名字中可能会有缩写,因此应该在结尾处添加<空格>DR<空格>以避免名字中的缩写造成问题。

例如:

BRUCE WAYNE MR
GAL GADOT DR MS
GOD ZILADR DR MRS

我没有想法了,有什么好的建议吗?


2
$1 替换。可能你还想用 (?:\\s+(?:-|MRS?|MI?SS?))?$ 替换 \\s(-|MRS?|MI?SS?)?$ 并在 DR 前添加 \\s。请参考这个正则表达式演示 - Wiktor Stribiżew
@WiktorStribiżew 谢谢,这正如我所希望的那样工作。是的,$1我忘了那个,是我的错。 - JuBz
1个回答

1
我建议使用。
.replaceAll("(.*?\\sDR)(?:\\s+(?:-|MRS?|MI?SS?))?$", "$1");
                 ^^^   ^^^   ^ ^^              ^^

查看正则表达式演示

注释:

  • 由于需要匹配带有空格的DR,因此在DR之前添加了\s
  • 整个尾部是可选的,因此空格也必须是可选的。(?:\s+(?:-|MRS?|MI?SS?))?匹配1或0个出现的1+空格,后跟-MRMRSMSMSSMISMISS
  • 为保留起始文本,请使用对第1组的反向引用进行替换。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接