单撇号之间的Python正则表达式findall()子串

标签 python regex nlp substring findall

所以我需要捕获字符串中两个单引号之间的子字符串。

对于这个例子,我有字符串:

the real question this movie poses is not 'who ? ' but 'why ? '

我目前得到的输出是: [[“'谁?'”], [], []]

我希望正则表达式能够捕捉到“为什么? ' 同样,但我不知道为什么它不起作用。

这是我的正则表达式

pattern = re.compile(r"(\s+[\']{1}\D{2,}[^\']+[\']{1} | ^[\']{1}\D{2,}[^\']+[\']{1}$)")

我有\D 的原因是我不想捕捉 70 年代,我需要至少 2 个字符,因为我不想捕捉摇滚乐中的 'n。 我想添加 [^\'] 因为在它捕获完整之前 'WHO ? ' 但为什么 ? ' 但我需要 'WHO ? ' 和 '为什么 ?' 是单独的比赛。 任何建议都会有所帮助,在此先感谢。

最佳答案

为了轻松避免特殊情况,我建议进行一些预处理以使正则表达式更容易。

首先删除像 '70'n 这样的字符串(后跟空格),然后简单引号之间的非贪婪匹配就很容易了。

我更改了输入字符串以引入“数字和摇滚乐”。

import re

s = "the real question this '70 rock 'n roll movie poses is not 'who ? ' but 'why ? '"

s = re.sub(r"'(\d+|\w\s)","",s)

print(re.findall("'.*?'",s))

打印:

["'who ? '", "'why ? '"]

如果您有更多反例,使用类似的替换技术删除它们比尝试不匹配它们要容易得多。

关于单撇号之间的Python正则表达式findall()子串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57998702/

相关文章:

Python 正则表达式在模式中用可选词拆分

python - Mac OS X 上 pipenv 中带有 matplotlib 的空白图

JavaScript 正则表达式最后匹配

java - 如何使用斯坦福 NLP Tregex 获取包含多个单词的名词短语?

nlp - Bert 针对语义相似性进行了微调

python - 使用 asyncio 与其他对等方连接时如何处理 ConnectionRefusedError

python - python的正则表达式

arrays - 在 perl 中使用正则表达式合并相似的行

java - python子进程调用ubuntu 14.04

python - 创建conda环境时出现错误