Regex работает в notepad ++, но не в python - PullRequest
0 голосов
/ 16 апреля 2019

я пытаюсь это регулярное выражение (WVDC)((?:.*\r\n){1}) в блокноте ++, и он работает, но когда я делаю то же самое в Python, он не будет

текст

Above 85°C the rated (DC/AC) voltage must be derated at per 1.5%/2.5%°C
WVDC: 400 Volts DC
SVDC: 600 Volts DC

код питона

re.search(r'(WVDC)((?:.*\r\n){1})',txt)

Ответы [ 2 ]

3 голосов
/ 16 апреля 2019

В Python у меня работает следующий скрипт:

input = """Above 85°C the rated (DC/AC) voltage must be derated at per 1.5%/2.5%°C
WVDC: 400 Volts DC
SVDC: 600 Volts DC"""

result = re.findall(r'(WVDC).*\r?\n', input)
print(result)

['WVDC']

Обратите внимание, что единственное существенное изменение, которое я внес в шаблон регулярных выражений, - сделать возврат каретки \r необязательным. Таким образом, кажется, что многострочные строки в Python, возможно, то, что использует ваш источник, переносят только новые строки, но не переводы каретки. В любом случае, использование \r?\n для сопоставления с новыми строками, как правило, является хорошей идеей, поскольку оно может одновременно охватывать как строки Unix, так и Windows.

2 голосов
/ 16 апреля 2019

Вы не показали воспроизводимый пример, но открытие файлов в Python в текстовом режиме преобразует \r\n в \n. Блокнот ++ поддерживает точные окончания строк.

Удаление \r (или сделать его необязательным) из регулярного выражения должно решить проблему в Python. Вы также можете открыть файл в двоичном режиме, но рекомендуется обрабатывать текст в текстовом режиме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...