【问题标题】:Python extract substring from between parenthesisPython从括号之间提取子字符串
【发布时间】:2020-01-26 10:42:53
【问题描述】:

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

"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)

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

【问题讨论】:

  • 您尝试避免使用标准库模块的实际目标是什么?
  • 您可以在 ), 上拆分并从拆分列表中的每个元素中取出最后 8 个字符,但正则表达式是正确的方法
  • 我只是想知道我的方法是否正确,或者是否有更简单的方法来做到这一点。

标签: python string python-2.7


【解决方案1】:

我也认为使用re 是一种好方法,如果您不必以任何价格使用re,那么您可以这样做:

s = "Bob Rob Smith (L1234567), John Doe (k12345678)"
result = s.replace(')','(').split('(')[1::2]
print(result)

输出:

['L1234567', 'k12345678']

解释:我想在()处拆分,但是str.split方法只接受一个分隔符,所以我首先将)替换为(,然后我拆分并得到奇数元素。此方法适用于以下情况:() 仅在 IDs 周围使用,s 不以 ( 开头,s 不以 ) 开头,至少有一个字符在任意两个括号之间。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案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']

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-03-24
        • 2016-08-30
        • 1970-01-01
        • 2017-11-10
        • 1970-01-01
        • 1970-01-01
        • 2011-01-05
        • 1970-01-01
        相关资源
        最近更新 更多