我想匹配字符串:
from string as string
它可能包含也可能不包含as
。
我目前的代码是
r'(?ix) from [a-z0-9_]+ [as ]* [a-z0-9_]+'
但此代码与单个a
或s
匹配。因此from string a little
之类的内容也会出现在结果中。
我想知道这样做的正确方法是什么。
答案 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次出现。