Разница между '.' , '?' и '*' в регулярных выражениях?

Могу ли я получить пример того, как эти три элемента (называются метасимволами?) отличаются?

Я знаю, что * означает все или ничего, но я не уверен, что это правильно способ думать об этом. С другой стороны, . и ? кажутся одинаковыми. Они соответствуют одному персонажу, правда?

1
задан 9 September 2016 в 15:58

2 ответа

Вы можете вводить в заблуждение регулярные выражения с shell globs

В синтаксисе регулярных выражений . представляет любой одиночный символ (обычно исключая символ новой строки), тогда как * является регулярными выражениями [ ! d1] означает нуль или более предшествующего атома регулярного выражения (символ или группа). ? - квантификатор, означающий нуль или один экземпляр предшествующего атома, или (в вариантах регулярных выражений, которые его поддерживают), [gl2s] globs , который устанавливает поведение квантора неживым.

В оболочках оболочки ? представляет собой один символ (например, [regx] .), тогда как * представляет последовательность из нуля или более символов (эквивалентную регулярному выражению .*).

A несколько ссылок, которые могут оказаться полезными, - http://www.regular-expressions.info/quickstart.html и http://mywiki.wooledge.org/glob

30
ответ дан 23 May 2018 в 06:19

Примечание: Examples provided are in Python. Хотя концепция остается неизменной.

'.' - соответствующий символ, который соответствует любому символу, кроме символа новой строки (это тоже может быть переопределено аргументом re.DOTALL в Python) , Следовательно, он также называется подстановочным знаком.

'*' является символом соответствия (определяет, как часто может возникать элемент). Сокращение для Wildcard .

Это означает Wildcard - группа, которая предшествует звезде, может возникать любое количество раз в тексте. Он может полностью отсутствовать или повторяться снова и снова.

'?' также является квантором. Сокращение для Wildcard .

Это означает «совпадение нуля или одна из группы, предшествующих этому знаку вопроса». Его можно также интерпретировать как quantifier .

например:

pattern = re.compile(r'(\d{2}-)?\d{10}')
mobile1 = pattern.search('My number is 91-9999988888')
mobile1.group()
Output: '91-9999988888'

mobile2 = pattern.search('My number is 9999988888')
mobile2.group()
Output: '9999988888'

В приведенном выше примере '?' указывает, что две цифры, предшествующие ему, являются необязательными. Они могут не встречаться или встречаться не более одного раза.

«Сопоставить нуль или одну из группы, предшествующей этому знаку вопроса». [ ! d21]

'.' соответствует / принимает / проверяет любой отдельный символ для места, которое он удерживает в регулярном выражении.

например:

pattern = re.compile(r'.ot')
pattern.findall('dot will identify both hot and got.')
Output: ['dot', 'hot', 'got']

'?' соответствует / проверяет нулевое или единственное вхождение любого отдельного символа .

Проверьте пример номера мобильного телефона.

То же самое происходит с '*'. Он проверит пример Проверить номер мобильного телефона. .

Комбинация:

'.*': принимает как можно больше последовательности. Комбинация: .

'.*? 'Принимает первую согласованную последовательность и останавливается. Нежелательный подход

Для получения дополнительной информации рассмотрите следующие два вопроса ...

Как написать регулярное выражение, которое соответствует не жадным? regex - Что означает ленивое и жадное в контексте регулярных выражений?
5
ответ дан 23 May 2018 в 06:19

Другие вопросы по тегам:

Похожие вопросы: