Задача: нужно отбросить из начала данной строки все символы, не являющимися буквами, до первой встретившийся буквы. Исключительно используя регулярное выражение.
Например:
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,
, если модификатор не указан, будет найдено только начало целого текста)
Если он не экранирован и не находится внутри символьного класса
Метасимвол, инвертирующий символьный класс, т.е. [^.] найдёт все символы, отличные от точки.
ВНИМАНИЕ! [^^] находит любой символ, отличный от знака ^
Комментариев нет:
Отправить комментарий