regex - 查找具有给定名字的名字
问题描述
我在 miniconda3 下使用 Python 3.6.5。根据https://docs.python.org/3/library/re.html中给出的示例,如下所示:
m = re.search(r'(?<=-)\w+', 'spam-egg')
m.group(0)
'egg'
我想找到所有名字为 Bob 的名字。因此,我编写了以下代码:
import re
names = ['Raman Srinivasan', 'Balaji Srinivasan', 'Bob Stuart',
'Divya Srinivasan', 'James Ford', 'Bob Simposon', 'Bob Willis']
starts_with_bob = r'(?<=Bob)\w+'
for i in names:
found = re.search(starts_with_bob, i)
print(found.group(0))
但是,Jupyter 抛出了错误:
5 for i in names:
6 found = re.search(starts_with_bob, str(i))
---->7 print(found.group(0))
AttributeError: 'NoneType' object has no attribute 'group'
然后我尝试删除原始文本指示符 r 并将搜索模式更改为:
starts_with_bob = '(?<=Bob)\w+'
这也给出了同样的错误。我在这里想念什么?
解决方案
你的正则表达式是错误的。您的正则表达式匹配以下内容:
BobSmith
BobStamper
BobStevens
看?您的正则表达式需要一个额外的空间以及开始和结束锚点:
(?<=^Bob )\w+$
或者,您可以使用此正则表达式而无需后视:
^Bob (\w+)$
并得到group(1)
您的代码中还有另一个错误。当正则表达式匹配失败时,search
返回None
. 您需要检查None
并且仅当found
is notNone
时,才打印匹配项:
import re
names = ['Raman Srinivasan', 'Balaji Srinivasan', 'Bob Stuart',
'Divya Srinivasan', 'James Ford', 'Bob Simposon', 'Bob Willis']
starts_with_bob = r'(?<=^Bob) \w+$'
for i in names:
found = re.search(starts_with_bob, i)
if found != None:
print(found.group(0))
推荐阅读
- python - python 3中的try/except问题语句
- mysql - 从命令行连接MySQL,命令行实用程序怎么会如此不稳定?
- python - How to replace white space in column? Pandas
- python - Pandas 滚动总和,包括前几天和未来几天
- reactjs - 在 React 中使用一个或多个初始 useEffects?
- macos - 微星机械键盘在 MacBook Pro 上输入错误
- python - 使用python获取图像中的最高点(z)
- python-3.x - tf.reduce_mean 在 tf.function 中不起作用
- asp.net-mvc - 如何在多个网站 OpenIdConnect Azure AD B2C 中登录用户?
- flutter - 错误:在此小部件 Flutter [PropertiesGrid] 上方找不到正确的提供程序