python re.search возвращает None, хотя в строке присутствует подстрока - PullRequest
0 голосов
/ 01 ноября 2019

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

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

test = "((condition one = 14) or ((condition two = 10) and (condition three = null)))"
re.search("(and$)", test).start()
m = re.search("and", test)
m.group()

Ожидаемый результат - Индекс начальной позиции 'и'

Фактический результат - объект NoneType имеетбез атрибута начало

Ответы [ 2 ]

1 голос
/ 01 ноября 2019

Вы ищете регулярное выражение типа:

test = "((condition one = 14) or ((condition two = 10) and (condition three = null)))"
i = re.search("(and)|(or)", test).start()
print i

Это распечатывает позицию первого and или or найдено:

22

Редактировать: Для использования finditer вам нужно будет немного обновить вышеприведенный код:

test = "((condition one = 14) or ((condition two = 10) and (condition three = null)))"
pattern = re.compile(r"(and)|(or)")
for m in pattern.finditer(test):
    print(m.start())

вывод:

22
47
0 голосов
/ 01 ноября 2019

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

import re
test = "((condition one = 14) or ((condition two = 10) and (condition three = null)))"
i = re.search("and", test).start()
print(test[i:])

и (условие три = ноль)))

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