所以我需要捕获字符串中两个单引号之间的子字符串。
对于这个例子,我有字符串:
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/