【发布时间】:2016-04-01 00:08:02
【问题描述】:
我创建了以下正则表达式(Java):
(Lord |Lady |Ser )?(Agatha|John)?([ ]??Cain)?
除了在一种情况下(可能还有我在测试期间没有考虑到的其他情况),它工作正常:
如您所见,当您只有姓氏时,正则表达式也会占用单词后面的空格。我完全明白为什么,但我不知道如何解决它。
此正则表达式用于在代表书籍内容的大文本文件中查找人员。当然,它必须与我当前的工作环境(Java)兼容。
【问题讨论】:
-
为什么在 Cain 之前需要一个空格?
(Lord |Lady |Ser )?(Agatha|John)?(Cain)?这样可以吗? -
不是真的,因为如果我有“Lord John Cain”,它将产生 2 个不同的匹配而不是一个。
-
您确实意识到,如果在文本中某处写成
My Lord(包括最后一个空格),您会遇到同样的问题,难道您不能直接在 Java 中修剪匹配项吗? -
我非常愿意这样做,但是我将它用于 NER 数据集。
-
使用这样的可选组无法实现您想要的。它是固定模式还是动态构建?您可以尝试重新排列它,例如
\b(Lord|Lady|Ser)[ ](?:(Agatha|John)?(?:[ ](Cain))?)|(Agatha|John|Cain)\b。