【问题标题】:Removing salutations from full name using regex使用正则表达式从全名中删除称呼
【发布时间】:2018-06-19 09:32:57
【问题描述】:

我有像"John Connele MCA MD""John O'Connele" 这样的名字,我使用了这个正则表达式"s*[A-Z]+(?:\.|\b)"

String fullName = "John O'Connele MCA MD";
fullName = fullName.replaceAll("s*[A-Z]+(?:\.|\b)","").trim;
System.out.println(fullName)

正则表达式的目的是只删除称呼和标题我得到的输出是"John Connele",而正确的输出应该是"John O'Connele"

【问题讨论】:

  • 您的代码无法编译 - 正则表达式格式错误。此外,您似乎不是在寻找要删除的“称呼”,而是在寻找标题。您需要搜索适当的标准,例如可能是空格,后跟仅大写字母和空格的序列。
  • 有时名称可以是“John O'Connele, MCA,MD 所以我认为我不能依赖空格
  • 你需要找到一个合适的规则——我的只是一个例子。
  • 你可以试试{2,},而不是+

标签: java regex replaceall


【解决方案1】:

你可以使用

   \W*\b[A-Z]+\b(?!'\b)\.?

请参阅regex demo

详情

  • \W* - 任何 0+ 个非单词字符
  • \b - 单词边界(我们需要匹配整个单词)
  • [A-Z]+ - 1+ 大写 ASCII 字母
  • \b - 词尾(词边界)
  • (?!'\b) - 否 ' 后跟一个单词 char 允许紧跟在当前位置的右侧
  • \.? - 1 或 0 . 字符。

Java demo(注意所有反斜杠在字符串文字中都是双倍的,以表示文字反斜杠,正则表达式转义):

String fullName = "John O'Connele MCA,MD.";
fullName = fullName.replaceAll("\\W*\\b[A-Z]+\\b(?!'\\b)\\.?","").trim();
System.out.println(fullName); // => John O'Connele

【讨论】:

    【解决方案2】:

    你可以试试这个。

    \s[A-Z]{2,}+

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-21
      • 1970-01-01
      • 2019-02-16
      • 2013-06-20
      • 2018-04-14
      • 2019-08-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多