正则表达式将名/姓与可选标题匹配

时间:2015-12-26 13:00:31

标签: java regex match

我创建了以下正则表达式(Java):

(Lord |Lady |Ser )?(Agatha|John)?([ ]??Cain)?

除了在一种情况下(也许是我在测试期间没有考虑到的其他情况),它工作正常:

enter image description here

正如您所看到的,当您只有姓氏时,正则表达式也会使用该单词后面的空格。我完全理解为什么,但我不知道如何解决它。

此正则表达式用于将人员查找为表示书籍内容的大文本文件。当然,它必须与我当前的工作环境(Java)兼容。

1 个答案:

答案 0 :(得分:2)

您可以使用正则表达式回顾来实现目标。

\b(?<!\S)(?:(Lord|Lady|Ser)\s+)?(Agatha|John)?(?:\s*(?<=\b)(Cain))?(?<=\S)\b @ regex101

它具有与您的标准相匹配(可能超过)的这些品质:

  • 强制正则表达式匹配以非空格字符开头。
  • 第一次捕获将是标题(或空)。
  • 第二次捕获将是第一个名称(或空)。
  • 第三次捕获将是姓氏(或空)。
  • 所有匹配都没有前导或尾随空格。
  • 此外,它甚至可以通过换行匹配(在链接的正则表达式测试样本中的附加文本中显示)。
  • 标题,名字和姓氏都是单身人士组,对匹配集的添加就像向其各自的组添加额外的替换一样简单。
  • 为了避免匹配一个不匹配的“Lord X”的“Lord”,还增加了一个跟踪以非空白结尾的比赛的尾随后卫。

将regex101与示例数据联系起来,与正则表达式相关联。

相关问题