Skip to main content
 首页 » 编程设计

python之将区分大小写的正则表达式和不区分大小写的正则表达式合并为一个

2024年08月28日38bhlsheji

我有多个文件过滤器(我使用的是 python)。其中一些是 glob filters其中一些是 regular expressions .我有区分大小写和不区分大小写的 glob 和正则表达式。我可以使用 translate 将 glob 转换为正则表达式.

我可以将区分大小写的正则表达式组合成一个大的正则表达式。我们称它为 R_sensitive。

我可以将不区分大小写的正则表达式组合成一个大的正则表达式(不区分大小写)。我们称它为 R_insensitive。

有没有办法将 R_insensitive 和 R_sensitive 组合成一个正则表达式?该表达式(当然)区分大小写?

谢谢,

尤利安

注意:我组合表达式的方式如下:

有了 R1、R2、R3 正则表达式,我使 R = (R1)|(R2)|(R3)。

示例:

我正在搜索“*.txt”(不敏感的 glob)。但我有另一个 glob 是这样的:“*abc*”(区分大小写)。当一个不区分大小写而另一个区分大小写时,如何组合(通过编程)由“fnmatch.translate”产生的 2 个正则表达式?

请您参考如下方法:

不幸的是,您描述的正则表达式能力是序数修饰符或修饰符跨度。 Python 两者都不支持,尽管它们看起来像这样:

序数修饰符:(?i)case_insensitive_match(?-i)case_sensitive_match

修饰符范围:(?i:case_insensitive_match)(?-i:case_sensitive_match)

在 Python 中,它们都无法在 re 中解析。您可以做的最接近的事情(对于简单或小型匹配)是字母组:

[Cc][Aa][Ss][Ee]_[Ii][Nn][Ss][Ee][Nn][Ss][Ii][Tt][Ii][Vv][ Ee]_[Mm][Aa][Tt][Cc][Hh]case_sensitive_match

显然,这种方法最适合不敏感部分非常简短的情况,所以我担心它不是您的最佳选择。