Tôi đang sử dụng lớp và đã nhận thấy sự khác biệt lạ giữa kết hợp lại mã thông báo được lưu trữ trong t.lex.lexmatch, so với sre_pattern được định nghĩa theo cách thông thường mô-đun. nhóm (x) 's dường như được tắt bằng 1.Biểu thức chính quy pex lexmatch có các nhóm khác nhau so với thông thường
tôi đã xác định một lexer đơn giản để minh họa cho hành vi này tôi đang nhìn thấy:
import ply.lex as lex
tokens = ('CHAR',)
def t_CHAR(t):
r'.'
t.value = t.lexer.lexmatch
return t
l = lex.lex()
(tôi nhận được một cảnh báo về t_error nhưng bỏ qua nó cho . bây giờ) Bây giờ tôi ăn một số đầu vào cho lexer và nhận được một mã thông báo:
l.input('hello')
l.token()
tôi nhận được một LexToken(CHAR,<_sre.SRE_Match object at 0x100fb1eb8>,1,0)
. Tôi muốn tìm một đối tượng thi đấu:
m = _.value
Vì vậy, bây giờ tôi nhìn vào các nhóm:
m.group()
=>'h'
như tôi mong đợi.
m.group(0)
=>'h'
như tôi mong đợi.
m.group(1)
=>'h'
, nhưng tôi hy vọng nó sẽ không có một nhóm như vậy.
Hãy so sánh này để tạo ra một biểu hiện thường xuyên như vậy bằng tay:
import re
p = re.compile(r'.')
m2 = p.match('hello')
Điều này cho phép các nhóm khác nhau:
m2.group()
= 'h'
như tôi mong đợi.
m2.group(0)
= 'h'
như tôi mong đợi.
m2.group(1)
cung cấp cho IndexError: no such group
như tôi mong đợi.
Có ai biết tại sao sự khác biệt này tồn tại không?