Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 具有连续变量的正则表达式字符串_Python_Regex_Variables_Optional Parameters_Optional Variables - Fatal编程技术网

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

Python 具有连续变量的正则表达式字符串,python,regex,variables,optional-parameters,optional-variables,Python,Regex,Variables,Optional Parameters,Optional Variables,我对regex正则表达式相当陌生,需要一些帮助来构造字符串。我大部分都能理解,但当我需要匹配的文本后面有变量和可选短语时,我就被难住了 假设文本的格式类似于turn$1[the]lights,其中$1是我想要的变量,而可以包含或忽略。我已经尝试了以下“turn.+?”:用于打开灯光的?\s*灯光: >>> re.match("turn (.+) (?:the)?\s*lights", "turn on lights").groups() ("on",) 但是,当我包含并尝试匹

我对regex正则表达式相当陌生,需要一些帮助来构造字符串。我大部分都能理解,但当我需要匹配的文本后面有变量和可选短语时,我就被难住了

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

>>> re.match("turn (.+) (?:the)?\s*lights", "turn on lights").groups()
("on",)
但是,当我包含并尝试匹配打开灯时,我将使用作为变量

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

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

您只需使用惰性量词即可:

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

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

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

转身?灯光

按部分细分:

转身:直截了当。 .+?:捕获一个或多个任意字符,但?指示此操作不会变得贪婪。你可以读到关于贪婪的书 这个是用括号括起来的吗?应用于整个单词,使整个单词可选。这也将创建一个捕获组,但您可以安全地忽略这一事实。 灯光:简单明了。
++又好又快。。!我不确定我是否明白你的意思。。但我想你必须问OP的这个问题。同样基于你的演示,让我说是的,你的模式是有效的:-抱歉@Shafizadeh:问题不在于你,而在于OP这个答案是否有效。伟大的答案,我感谢详细的解释!