2

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

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

(command1|command2|command3).+;

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

有没有办法让它在遇到分号的第一个实例时停止?.除了我应该使用的东西之外,还有其他东西吗?

4

3 回答 3

5

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

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

就像仅供参考一样,这同样适用于*运营商。添加 a?将使其不贪婪。

于 2012-10-22T06:12:43.980 回答
3

告诉它只查找非分号。

[^;]+
于 2012-10-22T06:12:16.540 回答
1

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

.+?

after 你的"?"贪婪+量词将使它尽可能少地匹配,而不是尽可能多地匹配,默认情况下。

你的正则表达式是

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

请参阅Python RE 文档

于 2012-10-22T06:12:18.247 回答