Я пытаюсь это регулярное выражение (WVDC)((?:.*\r\n){1}) в notepad ++, и он работает, но когда я делаю то же самое в 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

Код Python

re.search(r'(WVDC)((?:.*\r\n){1})',txt)
1
Exorcismus 16 Апр 2019 в 16:38

2 ответа

Лучший ответ

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

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

2
Mark Tolonen 16 Апр 2019 в 13:42

Следующий скрипт работает для меня в 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.

3
Tim Biegeleisen 16 Апр 2019 в 13:42