繁体   English   中英

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

[英]Regular expression strings with consecutive variables

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

假设文本的格式设置为“转向$ 1 [灯]”,其中“ $ 1”是我想要的变量,而“ the”可以包含或保留。 我已经尝试过以下命令“ turn(。+)(?:the)?\\ s * lights”,它适用于“打开灯”:

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

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

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

使用正则表达式库可以做到这一点吗? 如果问题不清楚,我深表歉意,谢谢!

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

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

正则演示

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

  • 开灯
  • 把灯关掉
  • 开灯
  • 关灯

可以这样写一个正则表达式:

turn (.+?) (the )?lights

细分如下:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM