Как экранировать специальные символы Python Regex без использования обратной косой черты - PullRequest
0 голосов
/ 03 июля 2019

У меня есть регулярное выражение, которое выглядит примерно так:

pattern = "".join([
     '^', 
     lbtests['lbname'], 
     '\d{4}',
     '[A-Za-z]{2},
     '$'
])

re.compile(pattern)

Моя проблема в том, что словарь lbtests иногда разрешается в строку, содержащую скобки, например, Basophils (Abs), поэтому программа считает, что я пытаюсь создать группу. Вместо этого я хочу, чтобы он соответствовал строке "Basophils (Abs)".

Есть ли способ избежать скобок без использования обратной косой черты? Если нет, есть ли лучший способ сделать это?

Ответы [ 2 ]

2 голосов
/ 03 июля 2019

Выезд re.escape

import re

if __name__ == '__main__':
    pattern = f'hello {re.escape("(world)")}'
    print(re.match(pattern, 'hello (world)'))

    # output: 
    # <re.Match object; span=(0, 13), match='hello (world)'>

https://docs.python.org/3/library/re.html#re.escape

2 голосов
/ 03 июля 2019

Используйте re.escape(lbtests['lbname']), чтобы экранировать строку, чтобы точно соответствовать ей.

Пример:

>>> import re
>>> lbtests = {'lbname':'Basophils (Abs)'}
>>> re.escape(lbtests['lbname'])
'Basophils\\ \\(Abs\\)'

Обратите внимание, что она выходит за пределы пробела и скобок, поэтому она будет точно соответствовать.

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