2012-02-04 31 views
6

Với chuỗi sau:Python regex trận đấu đen dấu

s = 'abcdefg*' 

Làm thế nào tôi có thể phù hợp với nó hoặc bất kỳ chuỗi khác chỉ làm bằng chữ thường và tùy kết thúc với một dấu sao? Tôi nghĩ rằng những điều sau đây sẽ hiệu quả, nhưng không:

re.match(r"^[a-z]\*+$", s) 

Nó cung cấp None và không đối sánh.

Trả lời

13

Làm cách nào để khớp với chuỗi hoặc bất kỳ chuỗi nào khác chỉ được viết bằng chữ thường và tùy chọn kết thúc bằng dấu hoa thị?

Sau đây sẽ làm điều đó:

re.match(r"^[a-z]+[*]?$", s) 
  1. Các ^ phù hợp với sự khởi đầu của chuỗi.
  2. [a-z]+ khớp với một hoặc nhiều chữ thường.
  3. [*]? khớp với 0 hoặc một dấu hoa thị.
  4. $ khớp với phần cuối của chuỗi.

Regex gốc của bạn khớp chính xác với một ký tự chữ thường, theo sau là một hoặc nhiều dấu hoa thị.

4

\*? nghĩa 0-hoặc-1 dấu hoa thị:

re.match(r"^[a-z]+\*?$", s) 
1

Hãy thử

re.match(r"^[a-z]*\*?$", s) 

này có nghĩa là "một chuỗi gồm không hoặc nhiều ký tự chữ thường (do đó dấu hoa thị đầu tiên), tiếp theo là không hay một dấu hoa thị (dấu chấm hỏi sau dấu hoa thị đã thoát).

Regex của bạn có nghĩa là "chính xác một ký tự chữ thường theo sau bởi một hoặc nhiều dấu hoa thị"

0

Bạn đã quên dấu + sau [a-z] để cho biết bạn muốn 1 hoặc nhiều hơn trong số đó (ngay bây giờ nó chỉ khớp với một).

re.match(r"^[a-z]+\*+$", s) 
2
re.match(r"^[a-z]+\*?$", s) 

Các [a-z]+ phù hợp với chuỗi các chữ thường, và \*? phù hợp với một tùy chọn đen * chatacter.

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