Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在正则表达式和python之间提取内容?_Python_Regex_Parsing_Matching_Text Extraction - Fatal编程技术网

在正则表达式和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)