Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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_Parentheses - Fatal编程技术网

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サンダーナタラジ 如果你遵循