为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

繁花不似锦 2022-06-07 17:03:16
我有一个字符串,其格式如下:"Name Surname (ID), Name2 Surname2 (ID2)"ID 以字母开头,后跟几个数字。我们可以在该字符串中包含不同数量的人(我的意思是只能有一个人,如提供的示例中的 2 人,甚至更多)。此外,人们的名字或姓氏可能很少,因此不一致。我想提取由冒号分隔的 ID 构建的子字符串,因此对于本示例,它看起来像这样:"ID, ID2"现在我尝试了这种方法:import restring = "Bob Rob Smith (L1234567), John Doe (k12345678)"result = re.findall(r'[a-zA-Z][0-9]+', string)','.join(result)它工作得很好,但我想知道是否有更简单的方法不需要任何额外的模块。你们有什么想法吗?
查看完整描述

3 回答

?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

我也认为使用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不以 开头)、任意两个括号之间至少有一个字符。


查看完整回答
反对 回复 2022-06-07
?
饮歌长啸

TA贡献1951条经验 获得超3个赞

对我来说,这种RegEx方法似乎是最好的方法。


假设您不确切知道您的 ID 有多少位数字(引号:后跟几个数字),您可以通过整个字符串并捕获括号内的内容:


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


res = []

word = ''

open = False

for x in s:

    if x == '(':

        open = True

        continue

    if x == ')':

        open = False

        res.append(word)

        word = ''

    if open:

        word += x


print(res)

输出:


['L1234567','k12345678']


查看完整回答
反对 回复 2022-06-07
?
达令说

TA贡献1821条经验 获得超6个赞

您可以拆分),并从拆分列表中的每个元素中取出最后 8 个字符,但正则表达式是正确的方法

 [s[-8:] for s in mystring[:-1].split('),')]


查看完整回答
反对 回复 2022-06-07
  • 3 回答
  • 0 关注
  • 278 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信