Проблема строк регулярных выражений, содержащих специальные символы в python - PullRequest
1 голос
/ 09 июля 2020

У меня есть строка: «s = string.charAt (0) == 'd'» Я хочу получить кортеж ('0', 'd') Я использовал: re.search(r "\ ((. ?) \) == '(.?)' && "," string.charAt (0) == 'd' ") Я проверил переменную s при печати как "\\ ((.?) \\) == '(.?) '&& " Как исправить?

Ответы [ 4 ]

2 голосов
/ 09 июля 2020

Вы можете попробовать:

\((\d+)\).*?'(\w+)'

Объяснение приведенного выше регулярного выражения:

  • \( - соответствует ( буквально.
  • (\d+) - представляет первую группу захвата, совпадающую цифры один или несколько раз.
  • \) - соответствует ) буквально.
  • .*? - Лениво соответствует всему, кроме новой строки.
  • '(\w+)' - представляет совпадение второй группы захвата ' вместе с любым символом слова ([0-9a-zA-Z_]) один или несколько раз.

Pictorial Representation

Regex Demo

import re
regex = r"\((\d+)\).*?'(\w+)'"
test_str = "s = string.charAt (0) == 'd'"
print(re.findall(regex, test_str))
# Output: [('0', 'd')]

Вы можете найти пример выполнения вышеуказанной реализации в здесь.

2 голосов
/ 09 июля 2020

Используйте

\((.*?)\)\s*==\s*'(.*?)'

См. proof . Первая переменная фиксируется внутри группы 1, а вторая переменная - внутри группы 2.

Python код:

import re
string = "s = string.charAt (0) == 'd'"
match_data = re.search(r"\((.*?)\)\s*==\s*'(.*?)'", string)
if match_data:
    print(f"Var#1 = {match_data.group(1)}\nVar#2 = {match_data.group(2)}")

Вывод:

Var#1 = 0
Var#2 = d
1 голос
/ 09 июля 2020

Ваше регулярное выражение должно быть ".*\((.?)\) .* '(.?)\'". Это приведет к получению как символа внутри круглых скобок, так и символа внутри одинарных кавычек.

>>> import re
>>> s = " s = string.charAt (0) == 'd'"
>>> m = re.search(r".*\((.?)\) .* '(.?)'", s)
>>> m.groups()
('0', 'd')
0 голосов
/ 10 июля 2020

Спасибо всем за очень полезный ответ. Моя проблема решена ^^

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