在正则表达式python之间提取内容?

时间:2011-10-23 03:34:56

标签: python regex parsing matching text-extraction

是否有一种简单的方法可以在正则表达式之间提取内容?假设我有以下示例文本

 SOME TEXT [SOME MORE TEXT] value="ssss" SOME MORE TEXT

我的正则表达式是:

 compiledRegex = re.compile('\[.*\] value=("|\').*("|\')')

这显然会返回整个[SOME MORE TEXT]值=“ssss”,但是我只想要返回ssss,因为那就是我正在寻找的

我显然可以定义一个解析器函数,但我觉得好像python提供了一些简单的pythonic方法来完成这样的任务

2 个答案:

答案 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)