【问题标题】:Regex replace operation if exist in java正则表达式替换操作(如果存在于 java 中)
【发布时间】:2020-03-21 17:08:54
【问题描述】:

是:

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

这个正则表达式操作不能删除 MRS 并且只留下 DR。

应该:

String: "DARTH WEDR DR MRS".replaceAll("(.*?DR)\\s(-|MRS?|MI?SS?)?$", "");
Output: "DARTH WEDR DR"

缩写总是在最后,但是有些名字可以在名字中带有缩写,所以应该在末尾阅读<space> DR <space>以避免名称中的缩写问题。

示例:

BRUCE WAYNE MR
GAL GADOT DR MS
GOD ZILADR DR MRS

我没有想法。有什么想法吗?

【问题讨论】:

  • 替换为$1。可能,您还想用(?:\\s+(?:-|MRS?|MI?SS?))?$ 替换\\s(-|MRS?|MI?SS?)?$ 并在DR 之前添加\\s。见this regex demo
  • @WiktorStribiżew 谢谢,这如我所愿。是的,1 美元忘记了,我的错。

标签: java regex string intellij-idea replace


【解决方案1】:

我建议使用

.replaceAll("(.*?\\sDR)(?:\\s+(?:-|MRS?|MI?SS?))?$", "$1");
                 ^^^   ^^^   ^ ^^              ^^

regex demo

注意事项

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

【讨论】:

    猜你喜欢
    • 2010-12-24
    • 2012-10-13
    • 1970-01-01
    • 2012-03-20
    • 1970-01-01
    • 2014-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多