2012-02-04 2 views
6

Учитывая следующую строку:Python регулярного выражения матча буквальная Звездочка

s = 'abcdefg*' 

Как я могу соответствовать его или любой другой строке, только сделанной из строчных букв и необязательно заканчивающихся звездочка? Я думал, что следующий будет работать, но это не делает:

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

Это дает None и не объект матча.

ответ

13

Как я могу сопоставить его или любую другую строку, состоящую только из строчных букв и необязательно заканчивая звездочкой?

Ниже будет делать это:

re.match(r"^[a-z]+[*]?$", s) 
  1. ^ соответствует началу строки.
  2. [a-z]+ соответствует одному или нескольким строчным буквам.
  3. [*]? соответствует нулевой или одной звездочке.
  4. $ соответствует концу строки.

Ваше оригинальное регулярное выражение соответствует одному символу нижнего регистра, за которым следует одна или несколько звездочек.

4

\*? означает 0 или-1 Звездочка:

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

Попытка

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

это означает, что «строка, состоящая ноль или более символов нижнего регистра (отсюда и первой звездочки), а затем ноль или одна звездочка (знак вопроса после экранированной звездочки).

Ваше регулярное выражение означает «ровно один строчный символ, за которым следует одна или несколько звездочек».

0

Вы забыли + после [a-z], чтобы указать, что вы хотите 1 или более из них (сейчас это соответствует только одному).

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

[a-z]+ соответствует последовательности строчных букв, а \*? соответствует опциональному буквальному * chatacter.

Смежные вопросы