在正则表达式和python之间提取内容?
有没有一种简单的方法可以在正则表达式之间提取内容?假设我有以下示例文本在正则表达式和python之间提取内容?,python,regex,parsing,matching,text-extraction,Python,Regex,Parsing,Matching,Text Extraction,有没有一种简单的方法可以在正则表达式之间提取内容?假设我有以下示例文本 SOME TEXT [SOME MORE TEXT] value="ssss" SOME MORE TEXT 我的正则表达式是: compiledRegex = re.compile('\[.*\] value=("|\').*("|\')') 这显然会返回整个[SOME MORE TEXT]value=“ssss”,但是我只希望返回ssss,因为这就是我要找的 我显然可以定义一个解析器函数,但我觉得python提供
SOME TEXT [SOME MORE TEXT] value="ssss" SOME MORE TEXT
我的正则表达式是:
compiledRegex = re.compile('\[.*\] value=("|\').*("|\')')
这显然会返回整个[SOME MORE TEXT]value=“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""")
例子
您的正则表达式有错误。它将匹配
value=“foo”
和value='bar”
,您几乎肯定不想这样做。您应该改为使用它:r'\[.\]value=(“|”)(.*?\1'
。请注意,使用三重引号字符串可以避免转义“.”。另外,在Python中处理正则表达式时,始终使用原始字符串(例如r'foo'和r“bar”)也是一个好主意。
m = regex.search("""SOME TEXT [SOME MORE TEXT] value="ssss" SOME MORE TEXT""")
print m.group(2)