在regex python之间提取内容



是否有一个简单的方法来拉一个正则表达式之间的内容?假设我有以下示例文本

 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)

相关内容

  • 没有找到相关文章

最新更新