我想知道从长字符串中提取括号中的最后一个字符串的方法。所以我需要一个函数extract_last
,例如,让我得到一个这样的输出:
>> extract_last('(hello) my (name) is (Luis)')
>> 'Luis'
如果不使用for,我怎样才能做到这一点,我正在寻找最聪明的方法。
我实施的方式有效。我没有测试它的所有可能性,但最简单的事情做得很好:
def extract_last(string):
bracket_found = False
characters = []
for character in string[::-1]:
if character == ')':
bracket_found = True
continue
if(character == '(' and bracket_found):
break;
if(bracket_found and character != ')'):
characters.append(character)
return ''.join(characters[::-1])
但是这个解决方案有很多行,我知道使用正则表达式或类似的东西,我可以用一行或两行解决方案来实现。
答案 0 :(得分:3)
您可以使用正则表达式:
s = '(hello) my (name) is (Luis)'
re.sub('^.*\((.*?)\)[^\(]*$', '\g<1>', s) # Search for the content between the last set of brackets
# 'Luis'
你可以搜索所有括号:
l = re.findall('\((.*?)\)', s) # Search for all brackets (and store their content)
#['hello', 'name', 'Luis']
theOne = l[-1] # Get the last one
#'Luis'
答案 1 :(得分:3)
import re
def extract_last(val):
r = re.findall(r'\((\w+)\)', val)
return r[-1] if r else None
答案 2 :(得分:2)
使用split
或rsplit
是实现目标的一种方式
>>> a= '(hello) my (name) is (Luis)'
>>> a.split('(')[-1].split(')')[0]
'Luis'
>>> a.rsplit('(')[-1].rsplit(')')[0]
'Luis'
>>>
其中[-1]是找到的最后一项,[0]是第一项
答案 3 :(得分:1)
你真的不需要在这里使用正则表达式。只需使用rpartition
在最后一次出现(
时将字符串拆分,然后从切片结果中将)
>>> string = '(hello) my (name) is (Luis)'
>>> string.rpartition('(')[-1].strip(')')
'Luis'
拆分。
Phaser.States
答案 4 :(得分:-1)
你可以使用split函数来获取子字符串, 你可以试试这个:
def extract_last(my_string):
temp = my_string.split(" ")
print temp[-1] ## get last element
extract_last('(hello) my (name) is (Luis)')
现在temp包含由&#34;分隔的所有单词&#34;(空格) 从最后读取并获得您的价值