2012-09-12 20 views
7

Tôi đang gặp sự cố với biểu thức chính quy Python có vẻ đơn giản.sre_constants.error là gì: không có gì để lặp lại

# e.g. If I wanted to find "mark has wonderful kittens, but they're mischievous.." 
p = re.compile("*kittens*") 

này sẽ thất bại với các lỗi:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib64/python2.7/re.py", line 190, in compile 
    return _compile(pattern, flags) 
    File "/usr/lib64/python2.7/re.py", line 242, in _compile 
    raise error, v # invalid expression 
sre_constants.error: nothing to repeat 

Tôi có thể bị thiếu một cái gì đó khá đơn giản, biểu thức thông thường là chắc chắn không phải trong những điểm mạnh của tôi!

Trả lời

18

Bạn đang nhầm lẫn biểu thức chính quy với globs.

Bạn có nghĩa là:

p = re.compile(".*kittens.*") 

Lưu ý rằng một dấu hoa thị trần không có nghĩa là giống nhau ở một RE giống như trong một biểu thức glob.

+0

Cảm ơn. Điều này dường như hoạt động hoàn hảo. Nhân tiện - có hướng dẫn nào để học RE rằng bạn (hoặc bất kỳ ai khác!) Sẽ giới thiệu? Tài liệu Python là tuyệt vời và tất cả, nhưng có vẻ hơi dốc. –

+1

@RickyHewitt Hãy thử http://www.regular-expressions.info/tutorial.html. – unwind

2

* là một metacharacter, có nghĩa là "0 hoặc nhiều mã thông báo trước" và không có gì để lặp lại cho * đầu tiên.

Có lẽ bạn đang tìm kiếm ranh giới từ:

p = re.compile(r"\bkittens\b") 

\b đảm bảo rằng chỉ toàn bộ từ được phù hợp (quá regex này sẽ thất bại trên, e hèm, "kittenshit")

+1

điều này sẽ không bị bắt gặp trên 're.match', nhưng sẽ bị bắt vào' re.findall' hoặc 're.search' (+1). – mgilson

+2

Nếu bạn đang đánh mèo con, bạn và tôi sẽ có lời, mister, 75k + nghiệp hay không. – DSM

Các vấn đề liên quan