是否有一个简单的方法来拉一个正则表达式之间的内容?假设我有以下示例文本
SOME TEXT [SOME MORE TEXT] value="ssss" SOME MORE TEXT
我的正则表达式是:
compiledRegex = re.compile('[.*] value=("|').*("|')')
这显然会返回整个[SOME MORE TEXT]值="ssss",但是我只希望返回ssss,因为这是我正在寻找的
我显然可以定义一个解析器函数,但我觉得好像python提供了一些简单的python方式来完成这样的任务
这就是设计捕获组的目的。
compiledRegex = re.compile('[.*] value=(?:"|')(.*)(?:"|')')
matches = compiledRegex.match(sampleText)
capturedGroup = matches.group(1) # grab contents of first group
旧组中的?:
(括号)表示该组现在是一个非捕获组;也就是说,它在结果中将不能作为一个组访问。我对它们进行了转换,以使输出更简单,但如果您愿意,可以将它们保留为捕获组(但随后必须使用matches.group(2)
,因为第一个引号将是第一个捕获组)。
你原来的正则表达式太贪婪了: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)