我有一个字符串:
>>> s = 'Evolution Recruitment (Agency) (London, UK)',我想得到这个部分,:
London, UK
请记住,对于实际情况,我正在处理的第一个方括号中的(agency)不一定在字符串中。
我试过这个
>>> import re
>>> re.findall("\((.*?)\)$", s)
['Agency) (London, UK']如果我能够让regex从右到左而不是从左到右读取,那么这个解决方案应该可以工作。
这有可能吗?如果没有,是否有其他方法可以获得部件London, UK
发布于 2012-12-18 14:31:33
In [8]: re.search(r".*[(](.*)[)]", s).groups()
Out[8]: ('London, UK',)它只是使用一个贪婪的.*匹配来获得最后一组括号。
或者,您可以找到所有匹配的括号,只需使用最后一对:
In [14]: re.findall(r'\(.*?\)', s)[-1]
Out[14]: '(London, UK)'regex方法非常灵活。但是,如果您知道输入的格式良好,并且只希望将文本放在最后一组括号内:
In [11]: s[s.rfind('(')+1:s.rfind(')')]
Out[11]: 'London, UK'这将扫描从右到左的字符串,因此可能会相当有效(我已经分析了任何东西,所以这只是一个推测)。
发布于 2012-12-18 14:30:41
如果将.*?替换为[^(]*,则只应捕获最后一组括号的内容。
(你说得对,阅读这个从右到左的索引会更有效-也许你最好不要使用正则表达式,而是手动检查最后一个字符是一个),找到(的最后一个索引,并使用子字符串来获取两者之间的内容?)
发布于 2012-12-18 14:31:36
这似乎是可行的:
re.findall(r"\(([^\)]+)\)$", s)它也适用于re.search:
re.search(r"\(([^\)]+)\)$", s).group(0)换句话说,寻找一个(,然后开始捕获任何不是)的东西,直到您看到一个)之前,停止捕获。只有当行在)之后结束时才保留它--否则,它不算作匹配。
https://stackoverflow.com/questions/13935077
复制相似问题