首页 > 解决方案 > 正则表达式在句子中查找名称

问题描述

我有一些类似的句子

1:

“RLB 显示 Oubre Jr. (WAS) 合法地捆绑 Nurkic (POR),并且正确调用了一个持球。”

2:

“努尔基奇 (POR) 保持合法的防守位置,并与沃尔 (WAS) 发生偶然接触,这不会影响他的开球尝试。”

我需要使用 Python 正则表达式来查找名称“Oubre Jr”。“努尔基克”和“努尔基克”、“墙”。

p = r'\s*(\w+?)\s[(]' 

使用这种模式,我可以找到“['Nurkic', 'Wall']”,但在第 1 句中,我只能找到 ['Nurkic'],错过了“Oubre Jr”。

谁能帮我?

标签: pythonregex

解决方案


您可以使用以下正则表达式:

(?:[A-Z][a-z][\s\.a-z]*)+(?=\s\()

|-----Main Pattern-----|


详情

  • (?:)- 创建一个非捕获组
  • [A-Z]- 捕获 1 个大写字母
  • [a-z]- 捕获 1 个小写字母
  • [\s\.a-z]*- 捕获空格 ( ' ')、句点 ( '.') 或小写字母 0 次以上
  • (?=\s\()- 如果主模式后面只有' ('字符串,则捕获它

str = '''RLB shows Oubre Jr. (WAS) legally ties up Nurkic (POR), and a held ball is correctly called. 

Nurkic (POR) maintains legal guarding position and makes incidental contact with Wall (WAS) that does not affect his driving shot attempt.'''

res = re.findall( r'(?:[A-Z][a-z][\s\.a-z]*)+(?=\s\()', str )

print(res)

演示:https ://repl.it/@RahulVerma8/OvalRequiredAdvance?language=python3

匹配:https ://regex101.com/r/OsLTrY/1


推荐阅读