python正则表达式匹配组或不匹配它

时间:2017-10-31 14:41:38

标签: python regex

我想匹配字符串:

  

from string as string

它可能包含也可能不包含as

我目前的代码是

r'(?ix) from [a-z0-9_]+ [as ]* [a-z0-9_]+'

但此代码与单个as匹配。因此from string a little之类的内容也会出现在结果中。

我想知道这样做的正确方法是什么。

1 个答案:

答案 0 :(得分:1)

您可以使用

(?i)from\s+[a-z0-9_]+\s+(?:as\s+)?[a-z0-9_]+

请参阅regex demo

请注意,您使用x"详细" (自由间距)修改器,并且模式中的所有空格都变为格式化空格,re引擎在解析模式时省略了这些空格。因此,我建议使用\s+来匹配1个或更多个空格。如果您确实想要使用单个常规空格,只需省略x修饰符并使用常规空间。如果您需要x修饰符来插入注释,请转义常规空格:

r'(?ix) from\ [a-z0-9_]+\ (?:as\ )?[a-z0-9_]+'

此外,要匹配一系列字符,您需要使用分组构造而不是字符类。这里,(?:as\s+)?定义了一个可选的非捕获组,它匹配as +空间子串的1或0次出现。