我正在尝试拆分字符串以提取大括号中的最后一项。
例如,如果我有字符串
'Stud Rd/(after) Ferntree Gully Rd (Scoresby)'
我想将其拆分为组件
('Stud Rd/(after) Ferntree Gully Rd', 'Scoresby')
到目前为止,我已经编写了以下正则表达式来执行此操作
re.search(r'^(.*) \((.*)\)$', string)
然而,如果输入
,则会中断'Bell St/Oriel Rd (Bellfield (3081))'
我希望将其拆分为
('Bell St/Oriel Rd', 'Bellfield (3081)')
有没有更好的方法可以解决这个问题呢?
答案 0 :(得分:4)
你可以使用这个懒惰的正则表达式:
(.*?) \((.*)\)[^()]*$
示例:
>>> reg = r'(.*?) \((.*)\)[^()]*$'
>>> s = 'Bell St/Oriel Rd (Bellfield (3081))'
>>> re.findall(reg, s)
[('Bell St/Oriel Rd', 'Bellfield (3081)')]
>>> s = 'Stud Rd/(after) Ferntree Gully Rd (Scoresby)'
>>> re.findall(reg, s)
[('Stud Rd/(after) Ferntree Gully Rd', 'Scoresby')]
答案 1 :(得分:1)
更改正则表达式模式并以正确的方式使用匹配对象(由search
函数返回):
import re
str = 'Bell St/Oriel Rd (Bellfield (3081))'
result = re.search(r'^(.*?) \((.*?)\)$', str)
print(result.group(1,2)) # ('Bell St/Oriel Rd', 'Bellfield (3081)')
答案 2 :(得分:0)
我会使用这个方案,因为t
是你的文字:
last = re.findall('\([^())]+\)', t)[-1]
正则表达式搜索左括号,然后取出既不打开也不关闭括号的所有内容,然后匹配右括号。由于可能有多个这样的,我使用findall
并取最后一个。
答案 3 :(得分:0)
如果您在最后一个块之前没有任何括号,则可以正常工作。
var = 'Bell St/Oriel Rd', 'Bellfield (3081)'.split('(')
var[-1] = var[-1][:-1]