匹配任何字符多次,但停在给定字符处

时间:2012-10-22 06:10:19

标签: python regex

我正在编写一个正则表达式,用于识别字符串中的命令。我有三个可能的命令可以开始,它们总是以分号结尾。

我相信正则表达式应该是这样的:

(command1|command2|command3).+;

我发现问题是,由于.匹配任何字符而+告诉它匹配一个或多个字符,它会跳过分号的第一个实例并继续运行

有没有办法让它在它遇到的分号的第一个实例停止?我应该使用除.以外的其他内容吗?

3 个答案:

答案 0 :(得分:5)

您面临的问题是:(command1|command2|command3).+;+是贪婪的,这意味着它将匹配所有内容直到最后一个值。

要解决此问题,您需要将其设为非贪婪,为此,您需要添加?运算符,如下所示:(command1|command2|command3).+?;

正如一个FYI,同样适用于*运营商。添加?会使其变得非贪婪。

答案 1 :(得分:3)

告诉它只找到非分号。

[^;]+

答案 2 :(得分:1)

您正在寻找的是非贪婪匹配。

.+?

贪婪的"?"量词之后的+会使其尽可能少地匹配 ,而不是默认情况下尽可能多地匹配

你的正则表达式是

'(command1|command2|command3).+?;'

参见 Python RE documentation