【问题标题】:Regular expression for three numbers三个数字的正则表达式
【发布时间】:2018-06-23 23:38:53
【问题描述】:

我创建了一个正则表达式,它可以从四位数字中以任意顺序匹配 2 个数字。我正在尝试创建一个正则表达式,它可以以任何顺序从四位数字中计算出 3 个数字。以下是我目前用来匹配两个数字的方法:

regEx01 = re.compile(r'\b[0-9]*(?:0[0-9]*[0-9]?1|1[0-9]*[0-9]?0)[0-9]*\b')

701980192160 中匹配01

未来的正则表达式必须匹配012

7012 positive
0190 negative
9201 positive
1226 negative

任何方向将不胜感激。

【问题讨论】:

    标签: python regex regex-lookarounds


    【解决方案1】:

    您可以使用基于积极前瞻的正则表达式使其简洁:

    \b(?=\d*0)(?=\d*1)(?=\d*2)\d+\b
    

    请参阅regex demo

    详情

    • \b - 字边界
    • (?=\d*0) - 正向前瞻,需要在零个或多个数字后加上 0
    • (?=\d*1) - 需要 1
    • (?=\d*2) - 需要 2
    • \d+ - 1 位以上
    • \b - 字边界

    或者,为了提高性能,将\d*s 替换为“减”值:

    r'\b(?=[1-9]*0)(?=[02-9]*1)(?=[013-9]*2)\d+\b'
    

    this regex demo

    在这里,(?=[1-9]*0) 快速检查从 19 的 0+ 个数字后是否有 0(?=[02-9]*1) 检查 1(?=[013-9]*2) 以类似的方式检查 2方式。

    【讨论】:

    • 像魅力一样工作。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2020-03-05
    • 1970-01-01
    • 1970-01-01
    • 2012-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多