在Python正则表达式中,"(?ui)"代表什么意思?

3
2个回答

6

u代表Unicode标志i代表忽略大小写标志

Unicode标志使得\w、\W、\b、\B、\d、\D、\s和\S依赖于Unicode字符属性数据库。例如:

>>> re.findall(r'\d+', u'The answer is \u0664\u0662')         # No flag
[]

>>> re.findall(r'(?u)\d+', u'The answer is \u0664\u0662')     # With unicode flag
[u'\u0664\u0662']

忽略大小写标志执行不区分大小写的匹配。表达式如[A-Z]将匹配小写字母。这不受当前语言环境的影响。例如:
>>> re.findall(r'[a-z]+', 'HELLO world')         # No flag
['world']

>>> re.findall(r'(?i)[a-z]+', 'HELLO world')     # With ignore case flag
['HELLO', 'world']

6

http://docs.python.org/2/library/re.html#regular-expression-syntax

(?iLmsux) (集合“i”, “L”, “m”, “s”, “u”, “x”中的一个或多个字母)。该组匹配空字符串;字母设置相应的标志:

  • re.I (忽略大小写),
  • re.L (依赖于本地化环境),
  • re.M (多行模式),
  • re.S (点号匹配所有字符),
  • re.U (Unicode相关),
  • re.X (详细模式),

适用于整个正则表达式。 (这些标志在“模块内容”中有描述。)如果您希望将标志包含在正则表达式中,而不是将标志参数传递给 re.compile() 函数,则此功能很有用。

请注意,(?x) 标志会更改表达式的解析方式。它应该首先出现在表达式字符串中,或者在一个或多个空格字符后。如果标志之前有非空格字符,则结果是未定义的。

简而言之(?u)在正则表达式中使用Unicode,(?i)忽略大小写。


这个答案还解释了为什么有两种方法可以做同一件事。 - Berry Tsakala

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