регулярное выражение Python не соответствует - PullRequest
0 голосов
/ 02 апреля 2019

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

>>> j = 'admininfo'
>>> pattern = {}
>>> pattern[j] = "re.compile(r\":AdminInfo (\")"
>>> i = ':AdminInfo ('
>>> if re.search(pattern[j],i):
...   print("Found")
... else:
...   print("NOT FOUND")
...
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\dff\AppData\Local\Programs\Python\Python37\lib\re.py", line 183, in search
    return _compile(pattern, flags).search(string)
  File "C:\Users\dff\AppData\Local\Programs\Python\Python37\lib\re.py", line 286, in _compile
    p = sre_compile.compile(pattern, flags)
  File "C:\Users\dff\AppData\Local\Programs\Python\Python37\lib\sre_compile.py", line 764, in compile
    p = sre_parse.parse(p, flags)
  File "C:\Users\dff\AppData\Local\Programs\Python\Python37\lib\sre_parse.py", line 930, in parse
    p = _parse_sub(source, pattern, flags & SRE_FLAG_VERBOSE, 0)
  File "C:\Users\dff\AppData\Local\Programs\Python\Python37\lib\sre_parse.py", line 426, in _parse_sub
    not nested and not items))
  File "C:\Users\dff\AppData\Local\Programs\Python\Python37\lib\sre_parse.py", line 819, in _parse
    source.tell() - start)
re.error: missing ), unterminated subpattern at position 10

Я ожидаю, что результат будет Found

Ответы [ 2 ]

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

Я не уверен, что вы пытались достичь в pattern[j] = "re.compile(r\":AdminInfo (\")".

re.compile - это функция Python, нет смысла использовать ее как строку.Кроме того, само регулярное выражение недопустимо, так как содержит несбалансированные круглые скобки из-за незамкнутой группы захвата.

См. Следующий рабочий пример:

import re

j = 'admininfo'
pattern = {}
pattern[j] = re.compile(r":AdminInfo ")
i = ':AdminInfo ('
if re.search(pattern[j], i):
    print("Found")
else:
    print("NOT FOUND")

Выходы Found

1 голос
/ 02 апреля 2019

оба работают нормально, второй и третий может лучше

def test1():
    j = 'admininfo'
    pattern = {}
    pattern[j] = "re.compile(r\":AdminInfo \(\")"
    i = ':AdminInfo ('
    if re.search(eval(pattern[j]), i):
        print("Found")
    else:
        print("NOT FOUND")

def test2():
    j = 'admininfo'
    pattern = {}
    pattern[j] = re.compile(r":AdminInfo \(")
    i = ':AdminInfo ('
    if re.search(pattern[j], i):
        print("Found")
    else:
        print("NOT FOUND")

def test3():
    j = 'admininfo'
    pattern = {}
    pattern[j] = ":AdminInfo \("
    i = ':AdminInfo ('
    if re.search(pattern[j], i):
        print("Found")
    else:
        print("NOT FOUND")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...