Ви можете використовувати відповідні групи:
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, вам потрібно буде отримати дані з групи на об'єкт відповідності:
>>> 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)для першого матчу?