我正在编写一个正则表达式,用于识别字符串中的命令。我有三个可能的命令可以以命令开头的单词,它们总是以分号结尾。
我相信正则表达式模式应该是这样的:
(command1|command2|command3).+;
我发现的问题是,由于.
匹配任何字符并+
告诉它匹配一个或多个,它会跳过分号的第一个实例并继续前进。
有没有办法让它在遇到分号的第一个实例时停止?.
除了我应该使用的东西之外,还有其他东西吗?
您面临的问题是: (command1|command2|command3).+;
是+
贪婪的,这意味着它将匹配所有内容,直到最后一个值。
要解决此问题,您需要使其成为非贪婪的,为此您需要添加?
运算符,如下所示:(command1|command2|command3).+?;
就像仅供参考一样,这同样适用于*
运营商。添加 a?
将使其不贪婪。
告诉它只查找非分号。
[^;]+
您正在寻找的是非贪婪匹配。
.+?
after 你的"?"
贪婪+
量词将使它尽可能少地匹配,而不是尽可能多地匹配,默认情况下。
你的正则表达式是
'(command1|command2|command3).+?;'
请参阅Python RE 文档