Python从括号之间提取子字符串

我有一个字符串,其格式如下:


"Name Surname (ID), Name2 Surname2 (ID2)"


ID 以字母开头,后跟几个数字。我们可以在该字符串中包含不同数量的人(我的意思是只能有一个人,如提供的示例中的 2 人,甚至更多)。此外,人们的名字或姓氏可能很少,因此不一致。


我想提取由冒号分隔的 ID 构建的子字符串,因此对于本示例,它看起来像这样:


"ID, ID2"


现在我尝试了这种方法:


import re


string = "Bob Rob Smith (L1234567), John Doe (k12345678)"

result = re.findall(r'[a-zA-Z][0-9]+', string)

','.join(result)

它工作得很好,但我想知道是否有更简单的方法不需要任何额外的模块。你们有什么想法吗?


繁花不似锦
浏览 279回答 3
3回答

沧海一幻觉

我也认为使用re是一种好方法,如果您不必re不惜一切代价使用,那么您可以这样做:s = "Bob Rob Smith (L1234567), John Doe (k12345678)"result = s.replace(')','(').split('(')[1::2]print(result)输出:['L1234567', 'k12345678']说明:我想在(and处拆分),但.split方法str只接受一个分隔符,所以我首先替换)为(,然后拆分并得到奇数元素。此方法适用于以下情况:(和)仅在IDs 周围使用、s不以 开头(、s不以 开头)、任意两个括号之间至少有一个字符。

饮歌长啸

对我来说,这种RegEx方法似乎是最好的方法。假设您不确切知道您的 ID 有多少位数字(引号:后跟几个数字),您可以通过整个字符串并捕获括号内的内容:s = "Bob Rob Smith (L1234567), John Doe (k12345678)"res = []word = ''open = Falsefor x in s:    if x == '(':        open = True        continue    if x == ')':        open = False        res.append(word)        word = ''    if open:        word += xprint(res)输出:['L1234567','k12345678']

达令说

您可以拆分),并从拆分列表中的每个元素中取出最后 8 个字符,但正则表达式是正确的方法 [s[-8:] for s in mystring[:-1].split('),')]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python