具有连续变量的正则表达式字符串

时间:2016-04-15 20:39:38

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

我对正则表达式(正则表达式)相当新,需要一些帮助来制定一个字符串。我在大多数情况下都理解它,但是当我需要匹配的文本有变量后跟一个可选短语时,我感到难过。

假设文本格式化为“turn $ 1 [the] lights”,其中“$ 1”是我想要的变量,而“the”可以包含或省略。我尝试过以下模糊,“转(。+)(?:the)?\ s * lights”,适用于“打开灯”:

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

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

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

这可以通过正则表达式库实现吗?如果问题不清楚,我道歉,谢谢你提前!

2 个答案:

答案 0 :(得分:3)

你只需要使用延迟量词:

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

RegEx Demo

答案 1 :(得分:1)

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

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

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

turn (.+?) (the )?lights

按部分细分:

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