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

标签 python regex

我想匹配字符串:

from string as string

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

我当前的代码是

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

但是此代码匹配单个 as。因此,类似于 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/

相关文章:

python - 如何为 pd.merge_asof 设置合并和规范化多个数据帧

python - 创建一个以零为中心的白色颜色图

python - 寻找折叠式成语

java - 正则表达式:包含一个词,不包含另一个词

regex - 用于删除句点字符的某些使用的正则表达式匹配

c# - 如何编写正则表达式来在 C# 中查找和替换(Unicode/本地化)

python - 在 Django 中使用带有外键的模型的正确方法

python - 延迟加载 python 子模块,importlib 第一次失败

java - 在java中使用正则表达式匹配精确的单词

Javascript 正则表达式创建错误