【问题标题】:python regex find match in listpython 正则表达式在列表中查找匹配项
【发布时间】:2016-03-25 02:51:31
【问题描述】:

我有一个清单:

chain_views = [u'x|frequency|x:y|||cbase', 
               u'x|frequency|x:y||weights_UK18|cbase', 
               u'x|frequency||y|weights_UK18|c%']

我想根据上面的列表检查下面的条件

if el.startswith('x|frequency|') and el.split('|')[4]!='' and el.split('|')[3]=='y':

如何在正则表达式中转换上述条件?

现在我正在循环检查这个,我认为正则表达式可能是一个更好的选择?

for el in chain.views:

    if el.startswith('x|frequency|') and el.split('|')[4]!='' and el.split('|')[3]=='y':
        weighted_views = True
        break
    else:
        weighted_views = False

return weighted_views

【问题讨论】:

  • 循环的目标是什么?它总是立即返回最后一个列表元素的weighted_views 结果。
  • 您是否将continuebreak 混淆了? Continue 只是进行下一次迭代,无论如何它都会这样做。你也可以避免两次调用el.split('|')。我知道这只是示例代码,但仍然值得注意。
  • 你说得对,我把它弄糊涂了!

标签: python regex loops conditional-statements


【解决方案1】:

由于字符串看起来像一种 CSV,我更喜欢使用 split 函数并完全避免使用正则表达式。

for el in chain_views:
    a0, a1, a2, a3, a4, a5 = el.split('|')  # give better names
    if a0 == 'x' and a1 == 'frequency' and a3 == 'y' and a4:
        return True
return False

【讨论】:

    【解决方案2】:

    如果正则表达式确实让生活更轻松

    我希望这对你有用

    重新导入

    x = [

    u'x|frequency|x:y|||cbase',
    u'x|frequency|x:y||weights_UK18|cbase',
    u'x|frequency||y|weights_UK18|c%'
    

    ]

    t = "-".join(x)+'-'

    x = re.findall(r'((?:x\|\w+\|(?:x:y)?\|)(?!\|)[^-]*)+', t)

    其中 x 是您已过滤的新列表

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多