在Python 3.6及更高版本中,您可以使用内联修饰符组:
>>> s = "Welcome to PuNe, Maharashtra"
>>> print(re.findall(r"PuNe|(?i:MaHaRaShTrA)",s))
['PuNe', 'Maharashtra']
请参阅相关的Pythonre
文档:
(?aiLmsux-imsx:...)
(零或从所述一组多个字母'a'
,'i'
,'L'
,'m'
,'s'
,'u'
,'x'
,任选接着进行'-'
随后从一个或多个字母'i'
,'m'
,'s'
,'x'
。)中的字母设置或移除对应的标志:re.A
(只有ASCII匹配),re.I
(忽略大小写),re.L
(取决于语言环境),re.M
(多行),re.S
(所有点都匹配),re.U
(Unicode匹配)和re.X
(详细)。(这些标志在模块内容中描述。)
这些信件'a'
,'L'
并'u'
为内联标志使用时,所以他们不能合并或者按照相互排斥'-'
。而是,当其中一个出现在内联组中时,它将覆盖封闭组中的匹配模式。在Unicode模式中,(?a:...)
切换到仅ASCII匹配,然后(?u:...)
切换到Unicode匹配(默认)。在字节模式中,(?L:...)
切换到取决于语言环境的匹配,并(?a:...)
切换到仅ASCII匹配(默认)。此替代仅对狭窄的内联组有效,并且原始匹配模式在组外恢复。
_3.6版的新功能。
在3.7版中进行了更改:字母“ a”,“ L”和“ u”也可以在一个组中使用。_
不幸的是,re
3.6之前的Python版本不支持这些组,也不支持交替启用和禁用内联修饰符。
如果可以使用PyPi regex模块,则可以使用以下(?i:...)
结构:
import regex
s = "Welcome to PuNe, Maharashtra"
print(regex.findall(r"PuNe|(?i:MaHaRaShTrA)",s))
请参阅在线Python演示。