Python搜索和返回括号内的文本
好的,我读过很多类似的问题,并尝试过,但由于某些原因它不起作用。我有一个文件,上面有一堆行,看起来像这样: 这里有几句话:Python搜索和返回括号内的文本,python,regex,parentheses,Python,Regex,Parentheses,好的,我读过很多类似的问题,并尝试过,但由于某些原因它不起作用。我有一个文件,上面有一堆行,看起来像这样: 这里有几句话: "<Hello> (silly girl) that isn't what she want(s)" 上述印刷品: (silly girl) that isn't what she want(s) 如果我将组索引更改为1,就像在print(m.group(1))中一样,它只打印相同的内容,而不打印第一个括号: silly girl) that isn't w
"<Hello> (silly girl) that isn't what she want(s)"
上述印刷品:
(silly girl) that isn't what she want(s)
如果我将组索引更改为1
,就像在print(m.group(1))
中一样,它只打印相同的内容,而不打印第一个括号:
silly girl) that isn't what she want(s)
我做错了什么?正则表达式在默认情况下是贪婪的,所以从第一个'(
(在'silly'
之前)捕获到最后一个'want(s'
之后)。取而代之的是:
- 将其设置为与
的惰性匹配'?'
- 使用
而不是'[^()]'
将括号从匹配中排除(感谢@thg435,并查看他们对问题的评论以了解潜在的缺点)'.
- 使用
表示“两个或多个”,而不是两个单独的“一个或多个”'{2,}'
s;以及'+'
- 包括捕获组以排除括号本身
regex = re.compile(r"\(([^()]{2,}?)\)")
这使您可以切换到findall
以获取结果列表:
>>> import re
>>> regex = re.compile(r"\(([^()]{2,}?)\)")
>>> s = "<Hello> (silly girl) that isn't what she want(s)"
>>> m = re.findall(regex, s)
>>> m
['silly girl']
>>重新导入
>>>regex=re.compile(r“\([^()]{2,}?\))
>>>s=“(傻女孩)那不是她想要的(s)”
>>>m=re.findall(正则表达式,s)
>>>m
[“傻女孩”]
查看正则表达式的演示。正则表达式在默认情况下是贪婪的,因此从第一个'(
(在'silly'
之前)捕获到最后一个(在'want(s'
之后)。取而代之的是:
- 将其设置为与
的惰性匹配'?'
- 使用
而不是'[^()]'
将括号从匹配中排除(感谢@thg435,并查看他们对问题的评论以了解潜在的缺点)'.
- 使用
表示“两个或多个”,而不是两个单独的“一个或多个”'{2,}'
s;以及'+'
- 包括捕获组以排除括号本身
regex = re.compile(r"\(([^()]{2,}?)\)")
这使您可以切换到findall
以获取结果列表:
>>> import re
>>> regex = re.compile(r"\(([^()]{2,}?)\)")
>>> s = "<Hello> (silly girl) that isn't what she want(s)"
>>> m = re.findall(regex, s)
>>> m
['silly girl']
>>重新导入
>>>regex=re.compile(r“\([^()]{2,}?\))
>>>s=“(傻女孩)那不是她想要的(s)”
>>>m=re.findall(正则表达式,s)
>>>m
[“傻女孩”]
查看正则表达式的演示。正则表达式在默认情况下是贪婪的,因此从第一个'(
(在'silly'
之前)捕获到最后一个(在'want(s'
之后)。取而代之的是:
- 将其设置为与
的惰性匹配'?'
- 使用
而不是'[^()]'
将括号从匹配中排除(感谢@thg435,并查看他们对问题的评论以了解潜在的缺点)'.
- 使用
表示“两个或多个”,而不是两个单独的“一个或多个”'{2,}'
s;以及'+'
- 包括捕获组以排除括号本身
regex = re.compile(r"\(([^()]{2,}?)\)")
这使您可以切换到findall
以获取结果列表:
>>> import re
>>> regex = re.compile(r"\(([^()]{2,}?)\)")
>>> s = "<Hello> (silly girl) that isn't what she want(s)"
>>> m = re.findall(regex, s)
>>> m
['silly girl']
>>重新导入
>>>regex=re.compile(r“\([^()]{2,}?\))
>>>s=“(傻女孩)那不是她想要的(s)”
>>>m=re.findall(正则表达式,s)
>>>m
[“傻女孩”]
查看正则表达式的演示。正则表达式在默认情况下是贪婪的,因此从第一个'(
(在'silly'
之前)捕获到最后一个(在'want(s'
之后)。取而代之的是:
- 将其设置为与
的惰性匹配'?'
- 使用
而不是'[^()]'
将括号从匹配中排除(感谢@thg435,并查看他们对问题的评论以了解潜在的缺点)'.
- 使用
表示“两个或多个”,而不是两个单独的“一个或多个”'{2,}'
s;以及'+'
- 包括捕获组以排除括号本身
regex = re.compile(r"\(([^()]{2,}?)\)")
这使您可以切换到findall
以获取结果列表:
>>> import re
>>> regex = re.compile(r"\(([^()]{2,}?)\)")
>>> s = "<Hello> (silly girl) that isn't what she want(s)"
>>> m = re.findall(regex, s)
>>> m
['silly girl']
>>重新导入
>>>regex=re.compile(r“\([^()]{2,}?\))
>>>s=“(傻女孩)那不是她想要的(s)”
>>>m=re.findall(正则表达式,s)
>>>m
[“傻女孩”]
查看regex的演示。jon是否有任何网站可以让我们学习有效的正则表达式、肉类或在线stuff@sundarnatarajサンダーナタラジ 如果你遵循我答案底部的链接,我发现有一个在线正则表达式测试器对开发和测试非常有用。使用compile而不仅仅是findall有什么意义?这个表达式在字符串方面会有问题,比如
“(傻女孩)想要更多(东西)”
@padraiccningham:re.findall(x,…)
被定义为re.compile(x).findall(…)
,所以它是一样的。jon有什么网站可以让我们学习有效的正则表达式、肉类或在线stuff@sundarnatarajサンダーナタラジ 如果你遵循我答案底部的链接,我发现有一个在线正则表达式测试器对开发和测试非常有用。使用compile而不仅仅是findall有什么意义?这个表达式在字符串方面会有问题,比如“(傻女孩)想要更多(东西)”
@padraiccningham:re.findall(x,…)
被定义为re.compile(x).findall(…)
,所以它是一样的。jon有什么网站可以让我们学习有效的正则表达式、肉类或在线stuff@sundarnatarajサンダーナタラジ 如果你遵循我答案底部的链接,我发现有一个在线正则表达式测试器对开发和测试非常有用。使用compile而不仅仅是findall有什么意义?这个表达式在字符串方面会有问题,比如“(傻女孩)想要更多(东西)”
@padraiccningham:re.findall(x,…)
被定义为re.compile(x).findall(…)
,所以它是一样的。jon有什么网站可以让我们学习有效的正则表达式、肉类或在线stuff@sundarnatarajサンダーナタラジ 如果你遵循