RegEx: захват слов в кавычках - PullRequest
0 голосов
/ 17 сентября 2018

У меня есть такой абзац текста:

Джон вышел на прогулку. Он встретил миссис Эдвардс и сказал: «Здравствуй, мам, как ты сегодня?». Она ответила: «Я в порядке. Как дела? '.

Я хотел бы зафиксировать слова в одинарных кавычках. Я попробовал это регулярное выражение

re.findall(r"(?<=([']\b))((?=(\\?))\2.)*?(?=\1))",string)

(из этого вопроса: RegEx: захват значений между кавычками )

Он вернул только одинарные кавычки в качестве вывода. Я не знаю, что пошло не так, может кто-нибудь мне помочь?

1 Ответ

0 голосов
/ 17 сентября 2018

Python требует, чтобы группы захвата были полностью закрыты перед любыми обратными ссылками (\2) на группу.

Вы можете использовать Положительный Lookbehind (?<=[\s,.]) и Положительный Lookahead (?=[\s,.]) утверждения нулевой длины для сопоставления слов внутри одинарных кавычек, включая такие слова, как I'm, то есть:

re.findall(r"(?<=[\s,.])'.*?'(?=[\s,.])", string)

Full match  56-92   'Hello Mam how are you doing today?'
Full match  106-130 'I'm fine. How are you?'

Пояснение enter image description here


Regex Demo

...