是否有一种简单的方法可以在正则表达式之间提取内容?假设我有以下示例文本
SOME TEXT [SOME MORE TEXT] value="ssss" SOME MORE TEXT
我的正则表达式是:
compiledRegex = re.compile('\[.*\] value=("|\').*("|\')')
这显然会返回整个[SOME MORE TEXT]值=“ssss”,但是我只想要返回ssss,因为那就是我正在寻找的
我显然可以定义一个解析器函数,但我觉得好像python提供了一些简单的pythonic方法来完成这样的任务
答案 0 :(得分:2)
这就是捕获组的目的。
compiledRegex = re.compile('\[.*\] value=(?:"|\')(.*)(?:"|\')')
matches = compiledRegex.match(sampleText)
capturedGroup = matches.group(1) # grab contents of first group
旧组内的?:
(括号)表示该组现在是非捕获组;也就是说,它不会在结果中作为一个组访问。我将它们转换为保持输出更简单,但如果您愿意,可以将它们保留为捕获组(但之后您必须使用matches.group(2)
,因为第一个引用将是第一个捕获的组)。
答案 1 :(得分:0)
您的原始正则表达式过于贪婪:r'.*\]'
不会停留在第一个']'
,第二个'.*'
不会停留在'"'
。要停留在c
,您可以使用[^c]
或'.*?'
:
regex = re.compile(r"""\[[^]]*\] value=("|')(.*?)\1""")
m = regex.search("""SOME TEXT [SOME MORE TEXT] value="ssss" SOME MORE TEXT""")
print m.group(2)