您可以使用匹配组:
p = re.compile('name (.*) is valid')
例如
>>> import re
>>> p = re.compile('name (.*) is valid')
>>> s = """
... someline abc
... someother line
... name my_user_name is valid
... some more lines"""
>>> p.findall(s)
['my_user_name']
在这里,我使用re.findall
而不是re.search
获取的所有实例my_user_name
。使用re.search
,您需要从match对象上的组中获取数据:
>>> p.search(s) #gives a match object or None if no match is found
<_sre.SRE_Match object at 0xf5c60>
>>> p.search(s).group() #entire string that matched
'name my_user_name is valid'
>>> p.search(s).group(1) #first group that match in the string that matched
'my_user_name'
如评论中所述,您可能希望使正则表达式不贪心:
p = re.compile('name (.*?) is valid')
只能提取到'name '
下一个之间的内容' is valid'
(而不是让您的正则表达式来提取' is valid'
组中的其他内容。
group(0)
第一次比赛吗?