Найти - Пользователи
Полная версия: regexp правильное использование
Начало » Python для новичков » regexp правильное использование
1
lobster
Приветствую всех участников форума!
Нужно найти все в начале строк “ПРИМЕР” и заменить на ПРИМЕР, т.е. выдернуть все кавычки в слове если оно встретится в начале строки. Делаю так(кусок кода):
content = re.sub(u'^"([А-Я]+)"', "\\1", content.decode("cp1251"), re.UNICODE | re.MULTILINE)
Это не работает, но если применить:
content = re.findall(u'^"([А-Я]+)"', content.decode("cp1251"), re.UNICODE | re.MULTILINE)
Все нормально, находит то что мне нужно, но замена не работает!
lobster
Вот нашел решение, но если честно не понял:
import re
st = '"foo"\n"foo"'
print st
print re.sub('(?m)^"(foo)"', r'\1', st, count=0)
Хотелось бы узнать что это за хитровые**нный символ (?m) перед знаком начала строки
py.user.next
>>> import re
>>> 
>>> s = """
... абвгд1 еёжзи1
... "абвгд2" еёжзи2
... абвгд3 еёжзи3
... "абвгд4" еёжзи4
... абвгд5 еёжзи5
... "абвгд6" еёжзи6
... """
>>> 
>>> output = re.sub(r'^"([^"]+)"', r'\1', s, flags=re.M)
>>> print(output)
абвгд1 еёжзи1
абвгд2 еёжзи2
абвгд3 еёжзи3
абвгд4 еёжзи4
абвгд5 еёжзи5
абвгд6 еёжзи6
>>>

(?m) означает встроенный флаг
их используют нечасто, ввиду того что их нельзя отменить в скомпилированных регулярных выражениях
lobster
Спасибо py.user.next, как всегда выручил!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB