【问题标题】:Looping with regex (Python) appending after match to a list在匹配到列表后使用正则表达式(Python)循环
【发布时间】:2020-06-20 02:07:54
【问题描述】:

所以我正在尝试使用正则表达式将字符串的每个匹配项附加到列表中。 所以这是我的代码。不幸的是,它(正确地)不起作用。

seq = 'ABABABBBASHDBDHBEHDBEDH'
Empty_list = []
regex_ex = re.finditer(r'.{3}', seq)
for x in regex_ex:
    Empty_list.append(x)

【问题讨论】:

  • 它只是不起作用(正常),你期望什么?
  • 您可以将匹配列表转换为列表而不是追加。
  • 您是否尝试将字符串拆分为 3 个字符的子字符串,放入列表中?无论如何,这就是正则表达式的样子。那是一把锤子,可以敲一些螺丝——也就是说,可能不是最好的工具。

标签: python regex list for-loop


【解决方案1】:

要访问匹配的值,您应该使用re.Match.group 方法:

for x in regex_ex:
    Empty_list.append(x.group())

您可以将 for 循环代码替换为列表理解:

Empty_list = [x.group() for x in  re.finditer(r'.{3}', seq)]
print(Empty_list)

输出:

['ABA', 'BAB', 'BBA', 'SHD', 'BDH', 'BEH', 'DBE']

如果您想要更紧凑的代码:

list(map(re.Match.group, re.finditer(r'.{3}', seq)))

输出:

['ABA', 'BAB', 'BBA', 'SHD', 'BDH', 'BEH', 'DBE']

【讨论】:

    【解决方案2】:

    你保存的是匹配对象而不是匹配的字符串:

    seq = 'ABABABBBASHDBDHBEHDBEDH'
    Empty_list = []
    regex_ex = re.finditer(r'.{3}', seq)
    for x in regex_ex:
        Empty_list.append(x.group(0)) # saves matched string
    print(Empty_list)
    

    输出:

    ['ABA'、'BAB'、'BBA'、'SHD'、'BDH'、'BEH'、'DBE']

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-03
      • 1970-01-01
      • 2014-03-30
      • 2011-08-11
      • 2015-11-06
      • 1970-01-01
      • 1970-01-01
      • 2012-04-23
      相关资源
      最近更新 更多