Ở đây nó là:Sự khác nhau giữa các nhóm và nhóm trong mô-đun tái là gì?
import re
>>>s = 'abc -j k -l m'
>>>m = re.search('-\w+ \w+', s)
>>>m.groups()
()
>>> m.group(0)
'-j k'
Tại sao groups()
mang lại cho tôi không có gì, nhưng group(0)
mang lại một số? Sự khác biệt là gì?
Follow Up
Mã là như sau
>>>re.findall('(-\w+ \w+)', s)
['-j k', '-l m', '-n o']
findall
có thể làm cho tôi tất cả các -\w+ \w+
chuỗi con, nhưng xem xét điều này:
>>>m = re.search('(-\w+ \w+)+', s)
>>>m.groups()
('-j k',)
Tại sao không thể search
Hãy cho tôi tất cả các chất nền?
Follow Up Again
Nếu s = 'abc -j k -l m -k o
và
>>>m = re.search(r'(-\w+ \w+)+', s)
>>>m.groups()
('-l m ',) # why just one substring?
>>>m.group(0)
'-j k -l m ' # as I expected
Hành vi tiêu chuẩn trong hầu hết các hương vị biểu thức chính quy là * thay thế * bất kỳ nội dung nào của nhóm khi nó được chụp nhiều lần thay vì tạo các nhóm phụ cho mỗi thẻ. Nếu bạn muốn chụp tất cả chúng, bạn sẽ phải tìm kiếm nhiều lần. 're.findall()' sẽ hữu ích trong trường hợp của bạn. – danielkza
@danielkza, nhưng tại sao 'groups()' cho tôi ''-l m'' không ''-j k''? – Alcott
Vượt qua đầu tiên của sự lặp lại khớp với '-j k'. Pass thứ hai sau đó ghi đè lên kết quả được lưu trữ với một cái mới, '-l m'. Nếu có nhiều trận đấu hơn sau, trận đấu cuối cùng sẽ là trận đấu được lưu trữ. Tôi không thể cho bạn biết * tại sao * hành vi này tồn tại, nhưng nó có mặt hầu như tất cả các hương vị biểu hiện chính quy. Nếu bạn muốn nắm bắt tất cả các trận đấu, bạn phải áp dụng mẫu nhiều lần. – danielkza