Bạn có thể sử dụng các nhóm phù hợp:
p = re.compile('name (.*) is valid')
ví dụ
>>> 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']
Ở đây tôi sử dụng re.findall
chứ không phải re.search
để có được tất cả các trường hợp my_user_name
. Sử dụng re.search
, bạn cần lấy dữ liệu từ nhóm trên đối tượng khớp:
>>> 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'
Như đã đề cập trong các bình luận, bạn có thể muốn làm cho regex của mình không tham lam:
p = re.compile('name (.*?) is valid')
chỉ chọn những thứ ở giữa 'name '
và tiếp theo ' is valid'
(thay vì cho phép regex của bạn lấy thứ khác ' is valid'
trong nhóm của bạn.
group(0)
là trận đấu đầu tiên?