首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Regex:从“进化招募(机构)”(伦敦,英国)中获得“伦敦,英国”

Regex:从“进化招募(机构)”(伦敦,英国)中获得“伦敦,英国”
EN

Stack Overflow用户
提问于 2012-12-18 14:28:52
回答 4查看 73关注 0票数 0

我有一个字符串:

代码语言:javascript
复制
>>> s = 'Evolution Recruitment (Agency) (London, UK)'

,我想得到这个部分,

London, UK

请记住,对于实际情况,我正在处理的第一个方括号中的(agency)不一定在字符串中。

我试过这个

代码语言:javascript
复制
>>> import re
>>> re.findall("\((.*?)\)$", s)
['Agency) (London, UK']

如果我能够让regex从右到左而不是从左到右读取,那么这个解决方案应该可以工作。

这有可能吗?如果没有,是否有其他方法可以获得部件London, UK

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-12-18 14:31:33

代码语言:javascript
复制
In [8]: re.search(r".*[(](.*)[)]", s).groups()
Out[8]: ('London, UK',)

它只是使用一个贪婪的.*匹配来获得最后一组括号。

或者,您可以找到所有匹配的括号,只需使用最后一对:

代码语言:javascript
复制
In [14]: re.findall(r'\(.*?\)', s)[-1]
Out[14]: '(London, UK)'

regex方法非常灵活。但是,如果您知道输入的格式良好,并且只希望将文本放在最后一组括号内:

代码语言:javascript
复制
In [11]: s[s.rfind('(')+1:s.rfind(')')]
Out[11]: 'London, UK'

这将扫描从右到左的字符串,因此可能会相当有效(我已经分析了任何东西,所以这只是一个推测)。

票数 2
EN

Stack Overflow用户

发布于 2012-12-18 14:30:41

如果将.*?替换为[^(]*,则只应捕获最后一组括号的内容。

(你说得对,阅读这个从右到左的索引会更有效-也许你最好不要使用正则表达式,而是手动检查最后一个字符是一个),找到(的最后一个索引,并使用子字符串来获取两者之间的内容?)

票数 2
EN

Stack Overflow用户

发布于 2012-12-18 14:31:36

这似乎是可行的:

代码语言:javascript
复制
re.findall(r"\(([^\)]+)\)$", s)

它也适用于re.search

代码语言:javascript
复制
re.search(r"\(([^\)]+)\)$", s).group(0)

换句话说,寻找一个(,然后开始捕获任何不是)的东西,直到您看到一个)之前,停止捕获。只有当行在)之后结束时才保留它--否则,它不算作匹配。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13935077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档