【问题标题】:how to Python re.findall print only capturing matches? [closed]如何 Python re.findall 打印仅捕获匹配项? [关闭]
【发布时间】:2014-11-03 13:49:28
【问题描述】:

在这篇文章中

Regular expression negative lookbehind of non-fixed length

回答者说,匹配事物只是为了忽略它们。我想使用该示例,但我只想打印未被忽略的匹配项。

【问题讨论】:

  • 如果只想要bar,为什么还要匹配foo?你想让它在bar 之前匹配bar
  • 当然真实的例子更复杂,我只是给你一个SSCCE
  • 也许我们需要一个稍微不那么简单的例子?我无法理解为什么我要匹配我不想保留的东西。
  • @MarkGaleck 该问题包含我使用 Negative Lookahead 的答案。你到底想做什么?
  • 我无法更好地解释这一点。我道歉。谢谢大家,我很感激。这很尴尬。

标签: python regex


【解决方案1】:

如果你想确保foo 后面应该跟bar,如果你只对bar 感兴趣,那么你可以使用look-behind assertion,像这样

re.findall("(?<=foo )bar", "foo bar")
# ['bar']

如果你想匹配foo之后的任何东西,而不是bar,你可以这样做

re.findall("(?<=foo ).*", "foo google")
# ['google']

【讨论】:

  • 我没有正确解释。让我再试一次
【解决方案2】:

这将在列表中留下空项目。但是对于我假设您要问的问题,您可以在上下文中使用交替运算符,将您想要排除的内容放在左侧(说把它扔掉,这是垃圾)并放置您想要匹配的内容在右侧的捕获组中仅打印捕获的匹配项。

>>> re.findall(r'foo|(bar)', 'foo bar foo bar')
['', 'bar', '', 'bar']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-10
    • 2021-03-19
    • 2015-05-03
    • 2015-01-04
    • 1970-01-01
    相关资源
    最近更新 更多