我想匹配字符串:
from string as string
它可能包含也可能不包含 as
。
我当前的代码是
r'(?ix) from [a-z0-9_]+ [as ]* [a-z0-9_]+'
但是此代码匹配单个 a
或 s
。因此,类似于 from string a little
的内容也会出现在结果中。
我想知道这样做的正确方法是什么。
最佳答案
您可以使用
(?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+)?
定义了一个可选的非捕获组,它匹配 1 或 0 次出现的 as
+ 空格子字符串。
关于python 正则表达式匹配一个组或不匹配它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47038086/