【问题标题】:Regular expression strings with consecutive variables具有连续变量的正则表达式字符串
【发布时间】:2016-08-07 23:24:42
【问题描述】:

我对正则表达式(正则表达式)相当陌生,需要一些帮助来制定字符串。我大部分都理解它,但是当我需要匹配的文本有变量后跟一个可选短语时,我感到很困惑。

假设文本的格式类似于“打开 $1 [the] 灯”,其中“$1”是我想要的变量,而“the”可以包含或省略。我尝试了以下简介,“turn (.+) (?:the)?\s*lights”,它适用于“打开灯”:

>>> re.match("turn (.+) (?:the)?\s*lights", "turn on lights").groups()
("on",)

但是当我包含“the”并尝试匹配“turn on the lights”时,我将“on the”作为我的变量。

>>> re.match("turn (.+) (?:the)?\s*lights", "turn on the lights").groups()
("on the",)

这可以通过正则表达式库来完成吗?如果问题不清楚,我深表歉意,在此先感谢您!

【问题讨论】:

    标签: python regex variables optional-parameters optional-variables


    【解决方案1】:

    如果我正确理解了这个问题,您正在尝试编写一个匹配短语的正则表达式,其中包括但不限于以下内容:

    • 打开灯
    • 关灯
    • 开灯
    • 关灯

    执行此操作的正则表达式可以这样写:

    turn (.+?) (the )?lights

    按部分分解:

    • turn:直截了当。
    • (.+?):捕获一个或多个任意字符,但 ? 表示这不会变得贪婪。你可以阅读关于贪婪的文章here
    • (the )? 用括号括起来,使? 适用于整个单词,使整个the 可选。这也会创建一个捕获组,但您可以放心地忽略这一事实。
    • lights:直截了当。

    【讨论】:

    • 很好的答案,感谢详细的解释!
    【解决方案2】:

    你只需要为此使用一个惰性量词:

    turn (.+?) (?:the)?\s*lights
    

    RegEx Demo

    【讨论】:

    • ++ 又好又快 ..!
    • 我不确定我明白你的意思.. 但我认为你必须向 OP 提出这个问题。同样基于您的演示,让我说是的,您的模式有效:-)
    • 对不起@Shafizadeh:问题不是给你的,而是给 OP 这个答案是否有效
    猜你喜欢
    • 1970-01-01
    • 2018-06-22
    • 1970-01-01
    • 1970-01-01
    • 2015-05-16
    • 2023-03-15
    • 1970-01-01
    • 2014-06-12
    • 1970-01-01
    相关资源
    最近更新 更多