一致するグループを使用できます。
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)
最初のマッチのために?