【问题标题】:Regex findall matches letters "a" to "z" in a string followed by another character正则表达式 findall 匹配字符串中的字母“a”到“z”,后跟另一个字符
【发布时间】:2020-09-05 19:09:02
【问题描述】:

结果应该返回包含字母 a 到 c 后跟另一个字符的列表

文本是 aabbcc 我希望它返回 ['a', 'a', 'b', 'b', 'c']

import re
text = 'aabbcc'
result = re.findall(r'([a-c]).', text)
print(result)

但它返回 ['a', 'b', 'c']

【问题讨论】:

  • findall 返回非重叠匹配项。
  • 你需要[a-c](?!$)(?s)[a-c](?=.)

标签: python python-3.x regex findall re


【解决方案1】:

使用非捕获前瞻 ([a-z](?=.))。这与您的基本相同,但不会捕获下一个字符。

【讨论】:

    【解决方案2】:

    要使其按照您的方式工作,只需导入 regex 而不是 re 模块并使用 overlapped 参数:

    import regex
    text = 'aabbcc'
    result = regex.findall(r'([a-c]).', text, overlapped = True)
    print(result)
    

    打印:

    ['a', 'a', 'b', 'b', 'c']
    

    否则,在 cmets 和其他答案中提到的积极前瞻是一种选择。

    【讨论】:

    • 完美!!两者有什么区别?
    • @SanatkumarWagh, here 您可以阅读有关 regex 模块以及新旧行为的信息。请,如果这回答了您的问题,请不要忘记投票和/或接受答案。单击左侧的箭头和答案左侧的复选标记。
    猜你喜欢
    • 1970-01-01
    • 2011-09-02
    • 1970-01-01
    • 2012-04-09
    • 2013-10-31
    • 1970-01-01
    • 2012-02-24
    • 2023-02-01
    • 2020-10-15
    相关资源
    最近更新 更多