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

Python正则表达式如何可以忽略模式的一部分而不是整个表达式中的大小写?,python,regex,case-sensitive,case-insensitive,Python,Regex,Case Sensitive,Case Insensitive,假设我有一个包含foobar foobar foobar foobar的字符串,我想搜索所有包含不区分大小写的“foo”或“foo”但包含小写“bar”的实例。在这种情况下,re.findall应该返回['foobar','foobar'] 的公认答案解释说,它可以在C#with(?i)foo(?-i)bar中完成,但Python会引发一个无效的表达式错误 Python正则表达式库是否支持这样的功能?Python不支持以相同的方式禁用标志;你将不得不以不同的方式处理它 >>>

假设我有一个包含
foobar foobar foobar foobar
的字符串,我想搜索所有包含不区分大小写的“foo”或“foo”但包含小写“bar”的实例。在这种情况下,
re.findall
应该返回
['foobar','foobar']

的公认答案解释说,它可以在C#with
(?i)foo(?-i)bar
中完成,但Python会引发一个无效的表达式错误


Python正则表达式库是否支持这样的功能?

Python不支持以相同的方式禁用标志;你将不得不以不同的方式处理它

>>> re.match('[Ff][Oo]{2}bar', 'Foobar')
<_sre.SRE_Match object at 0x7eff94dac920>
重新匹配('[Ff][Oo]{2}bar',Foobar')
re模块不支持作用域标志,但有一个替代的正则表达式实现,它可以:


我担心这个解决方案,但它可能会奏效。在应用程序中,“foo”(不区分大小写的部分)将替换为任意字符串,由
re.escape
转义。因此,我需要以编程方式将字符串扩展到
'['+s[I]+s[I].swapcase()+']'…
。然而,可能的标点符号和其他非字母数字字符会产生问题。@Donal Fellows:是的,这也是可能的,但不像我的应用程序中纯大写或纯小写的“foo”那样常见。一种可能是实现一个不太完美的解决方案并测试这两种情况。答案对于Python3.6和更高版本不再有效,因为
re
现在支持内联修饰符组。