начало строки регулярного выражения в наборе символов

Предположим, я хочу найти «b», который встречается либо в начале строки, либо после «a».

Почему re.match('[\^a]b','b') совпадает, в то время как re.match('^b','b') делает?

Обновление: я понял, что должен был использовать search вместо match . Я хочу, чтобы он был позитивным для таких вещей, как «b», «cab», «ab», «bc» и «abd».

2 Solutions collect form web for “начало строки регулярного выражения в наборе символов”

Регулярное выражение [\^a]b будет соответствовать либо ab либо ^b , поэтому оно не должно соответствовать строке 'b' .

Обратите внимание, что re.match() только в начале строки, это re.match() на начало привязки строки в начале вашего регулярного выражения ( ^ или \A с включенной многострочной опцией).

Итак, «для поиска« b », который встречается либо в начале строки, либо после« a », вам нужно использовать re.search() со следующим регулярным выражением:

 (^|a)b 

Обратите внимание, что я интерпретирую это несколько иначе, чем другие ответы, я думаю , что ваше требование означает, что вы хотите сопоставить «b» в 'bob' а также ab в 'taboo' , поэтому начало строки требуется только для a b которому не предшествует a .

Этот метод чередования в группе дает вам более масштабируемое решение, чем ^b|ab , поэтому для соответствия b в начале строки или при использовании предшествующих a , x , 2 или 5 вы можете использовать следующее:

 (^|[ax25])b 

Ваше первое регулярное выражение действительно означает:

 [\^a]b # match a literal '^' or 'a', followed by a 'b' 

Второе регулярное выражение:

 ^b # match start of line followed by a 'b' 

Что вы действительно хотите для своего первого регулярного выражения:

 ^b|ab # match start of line followed by a 'b', # OR # an 'a' followed by a 'b' 

Также обратите внимание, что re.match() автоматически пытается найти совпадение, начинающееся с начала, вы хотите использовать re.search() если хотите найти строки, которые встречаются в середине строки.

Скажем, я хочу найти начало строки или «a», или «x», или «2» или «5», за которым следует «b». Не могу ли я сделать [^ax25]b вместо ^b|ab|xb|2b|5b ?

В этом случае я бы сделал:

 (^|[ax25])b 

Класс символов может включать только символы . Специальное значение каретки ( ^ ) как утверждение нулевой ширины, совпадающее с началом строки, изменяется, когда оно находится в символьном классе: оно может отрицать весь класс символов, если его первый символ или означать буквальный карет ( ^ ), если он экранирован или помещен в другом месте.

  • Заменить в строке на основе функции
  • Какое регулярное выражение Python соответствует всем символам алфавита, но не номерам?
  • Группы повторного захвата Python
  • python copytree с отрицательным шаблоном игнорирования
  • Соответствие новой строки Python RegEx
  • Регулярное выражение Python для замены двойной обратной косой черты одним обратным слэшем
  • Использование регулярных выражений Python для разделения на непересекающиеся группы символов (поиск ORF)
  • Regex удалить условные комментарии
  • Python - лучший язык программирования в мире.