Как импортировать Regex из внешнего файла с исходным форматом и без дополнительных escape-символов - PullRequest
0 голосов
/ 23 апреля 2020

Hell Everyone,

Я хотел бы попросить вас о поддержке в следующем вопросе.

Я недавно работаю над сценарием Python, который ищет совпадения примерно для 15 предложений, используя обычные выражения в тысячах файлов.

Предложения, которые мы будем искать, могут изменяться в течение дней / недель, и сценарий будет предоставляться пользователям со знаниями в регулярных выражениях, но не обладающими навыками программирования.

Затем, чтобы сделать этот сценарий более масштабируемым, я хотел сохранить регулярные выражения в другом файле, где эти пользователи могут изменять предложения без необходимости изменять сценарий python.

Пример

Этот файл будет непрерывно изменяться для соответствия различным предложениям.

--- regex.log ---

Th\w*\s+sen\w*
\d{0,3}

--- match.py ​​---

import re

with open("regexs.log", "r") as regexs:
    regex = regexs.readlines()

text = "This sentence"

for reg in regex:
    match = re.search(reg, text)

Однако это не работает ... когда экспортируются регулярные выражения, python добавляет дополнительные escape-символы к предложению. Например, для двух вышеприведенных регулярных выражений они импортируются, как показано ниже:

"Th\\w*\\s+send\\w*"
"\\d{0,3}"

Back sla sh дублируется, в результате чего регулярные выражения больше не используются, так как они больше не соответствуют предложениям. .

Просто интересно, есть ли способ импортировать эти регулярные выражения в исходное состояние?

Аналогичная операция происходит, если регулярные выражения сохраняются в списке:

>>> reg = ["\w+\n"]
>>> reg
['\\w+\n']

Привет.

Ответы [ 2 ]

0 голосов
/ 23 апреля 2020

Я попытался заменить, как показано ниже:

regex = regex.replace("\\", "\")

, но он возвращает:

SyntaxError: EOL while scanning string literal

Кажется, python распознает «как заменить» (второе значение в заменить функцию) как символ двойной кавычки из-за escape-последовательности \ ", а не как обратная сторона sh.

0 голосов
/ 23 апреля 2020
regex = regex.readlines()
regex = regex.replace("\\", "\") # <= Add this

То, что он делает, это говорит: «везде, где есть \\, замените его на \. Но, если вы делаете какие-то другие вещи с файлом до его финализации, вы захотите переместить replace в более подходящее место.

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