Как передать выражение регулярного выражения, не меняя его? - PullRequest
0 голосов
/ 10 июля 2019

У меня есть функция с параметром str, предназначенная для регулярных выражений, однако всякий раз, когда я передаю регулярное выражение этой функции, она изменяет форматирование этой строки, добавляя дополнительные escape-символы, которые нарушают выражение.

Я попытался отправить обе строки с r перед строкой (r'[a-zA-Z]+ \(?(?:\d ?)+\)?') и без с тем же результатом.

Придется ли мне вручную удалять дополнительные escape-символы внутри функции или есть лучший способ?

Вот пример:

>>> def function(regex=r''):  # needs to be a kwarg for the actual implementation
...     return regex
...     
>>> function("r'[a-zA-Z]+ \(?(?:\d ?)+\)?'")
"r'[a-zA-Z]+ \\(?(?:\\d ?)+\\)?'"

Согласно отладчику pycharm, фактическое значение еще хуже, так как оно добавляет дополнительные вещи после 'r': 'r\\'[a-zA-Z]+ \\(?(?:\\d ?)+\\)?\\'

Я ожидал, что результирующая строка будет r'[a-zA-Z]+ \(?(?:\d ?)+\)?', без добавленных escape-символов / обратной косой черты, которые в итоге создадут плохой шаблон.

1 Ответ

1 голос
/ 10 июля 2019

Вы дважды оборачиваете свое регулярное выражение. Удалить лишние кавычки. r - это префикс, а не часть строки.

function(r'[a-zA-Z]+ \(?(?:\d ?)+\)?')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...