Страницы

Поиск по вопросам

вторник, 28 мая 2019 г.

Обработать строку с помощью регулярного выражения на Python

Задача: нужно отбросить из начала данной строки все символы, не являющимися буквами, до первой встретившийся буквы. Исключительно используя регулярное выражение.
Например: s = "12. Привет мир 23 раза"
Должно остаться "Привет мир 23 раза"
Пробовал как то так
re.match(r'(?<=(\d|\.|\s)*)(.*)', s).group()
не получается


Ответ

Модуль регулярных выражений Python re не поддерживает блоков предварительного просмотра назад неопределенной длины. В (?<=(\d|\.|\s)*) длина совпадения неопределена, так как квантификатор * находит ноль и более (неизвестно сколько) символов.
Используйте
re.sub(r'^[^а-яА-ЯёЁ]+', '', s)
Демо
Подробности:
^ - начало строки [^а-яА-ЯёЁ]+ - 1 и более символов, отличных от русских букв. Если надо, можно включить и латинские - [^а-яА-ЯёЁa-zA-Z]+
Примечание
Символ ^ в разных контекстах может обозначать:
Буквальный символ ^ (caret):
Если он экранирован знаком \ (в любом месте регулярного выражения) Если он находится внутри символьного класса не в начальной позиции (т.е. [;!^]) (В некоторых других языках / библиотеках ещё может быть между \Q ... \E) Метасимвол начала строки/целого текста (в зависимости от модификатора или библиотеки регулярных выражений, в Python при использовании re.M / re.MULTILINE - позиция после знака перевода строки LF,
, если модификатор не указан, будет найдено только начало целого текста)
Если он не экранирован и не находится внутри символьного класса Метасимвол, инвертирующий символьный класс, т.е. [^.] найдёт все символы, отличные от точки.
ВНИМАНИЕ! [^^] находит любой символ, отличный от знака ^

Комментариев нет:

Отправить комментарий