为了在大文本中查找名称,我有以下正则表达式
([A-Z][a-z]*)[\s-]([A-Z][a-z]*)
这适用于像“Jack Oneill”或“John Guidetti”这样的法线名称。但是有一些可能性我想找到,但找不到。喜欢:
Chandler Murial Bing
Gandalf the Gray
Pieter van den Woude
由于我对正则表达式的了解有限,我似乎无法理解这一点。任何人都可以帮助我(并请为此提供一个好的网站/书籍):)
最佳答案
解决正则表达式问题的最佳方法是描述您要查找的匹配项(通常称为语法)。
例如,根据您的问题,我可能会这样描述它:
.
(首字母)。 如果这提供了与所需结果集相当接近的匹配(并且要清楚,对于名称,有很多变体,您将有误报或漏报),然后您开始构建表达式:
[A-Z]([a-z]+|\.)
[a-z][a-z\-]+
结果:
[A-Z]([a-z]+|\.)(?:\s+[A-Z]([a-z]+|\.))*(?:\s+[a-z][a-z\-]+){0,2}\s+[A-Z]([a-z]+|\.)
匹配项(粗体):
Hello my name is Chandler Muriel Bing. I have a friend who is named Pieter van den Woude and he has another friend, A. A. Milne. Gandalf the Gray joins us. Together, we make up the Friends Cast and Crew.
问题:
关于regex - 使用正则表达式查找名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7653942/