Python正则表达式如何在模式的一部分中忽略大小写而不是整个表达式?

8
假设我有一个包含“foobar fooBAR FOObar FOOBAR”的字符串,并且我想搜索所有包含不区分大小写的“foo”或“FOO”,但是小写的“bar”。在这种情况下,re.findall应返回['foobar','FOObar']。 此问题的接受答案解释了可以使用(?i)foo(?-i)bar在C#中完成,但Python会引发无效表达式错误。
Python正则表达式库是否支持此功能?

@Donal Fellows:是的,这也是可能的,但在我的应用程序中,纯大写或纯小写的“foo”不如其他情况常见。一种可能性是实现一个不太完美的解决方案,并测试这两种情况。 - Vortico
答案不再适用于 Python 3.6 及更高版本,因为现在的 re 支持内联修饰符组。 - Wiktor Stribiżew
2个回答

7

Python不支持以同样的方式禁用标志,您需要以不同的方式处理它。

>>> re.match('[Ff][Oo]{2}bar', 'Foobar')
<_sre.SRE_Match object at 0x7eff94dac920>

我一开始担心那个解决方案,但它可能有效。在应用程序中,“foo”(不区分大小写部分)将被替换为任意字符串,并通过re.escape转义。因此,我需要以编程方式展开字符串为'[' + s[i] + s[i].swapcase() +']...'。然而,可能会出现标点符号和其他非字母数字字符的问题。 - Vortico

4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接