Регулярное выражение Python для соответствия # с последующим 0-7 и последующим ## - PullRequest
2 голосов
/ 20 мая 2009

Я бы хотел перехватить строку, начинающуюся с \*#\*

, за которым следует число от 0 до 7

и заканчивается: ##

так что-то вроде \*#\*0##

но я не смог найти регулярное выражение для этого

Ответы [ 5 ]

7 голосов
/ 20 мая 2009

Если вы хотите разрешить только один # до и два после, я бы сделал это так:

r'^(\#{1}([0-7])\#{2})'

Важно отметить, что регулярное выражение Алекса также будет соответствовать таким вещам, как

###7######
########1###

что может иметь или не иметь значение.

Мое регулярное выражение, приведенное выше, соответствует строке, начинающейся с # [0-7] ##, и игнорирует конец строки. Вы можете прикрепить $ к концу, если хотите, чтобы он совпадал, только если это вся строка.

Первая обратная ссылка дает вам всю строку # ##, а вторая обратная ссылка дает номер внутри #.

4 голосов
/ 20 мая 2009

Ни один из приведенных примеров не учитывает * # *

^\*#\*[0-7]##$

Pass: * # * 7 ##

Fail: * # * 22324324 ##

Fail: * # 3232 #

Символ ^ будет соответствовать началу строки, \ * будет соответствовать одной звездочке, символы # не должны быть экранированы в этом примере, и, наконец, [0-7] будет соответствовать только одному 0 и 7.

1 голос
/ 21 мая 2009

Как я понимаю вопрос, самое простое регулярное выражение, которое вам нужно:

rex= re.compile(r'^\*#\*([0-7])##$')

Конструкции {1} являются избыточными. После выполнения rex.match (или rex.search, но здесь это не обязательно), .group(1) объекта соответствия содержит заданную цифру.

РЕДАКТИРОВАТЬ: вся совпадающая строка всегда доступна как match.group(0). Если все, что вам нужно, это полная строка, удалите все скобки в регулярном выражении:

rex= re.compile(r'^\*#\*[0-7]##$')
1 голос
/ 20 мая 2009

Регулярное выражение должно быть похоже на ^ # [0-7] ## $

1 голос
/ 20 мая 2009

r'\#[0-7]\#\#'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...