3

Python Fuzzy Wuzzy 库包括以下正则表达式:

regex = re.compile(r"(?ui)\W")
return regex.sub(u" ", a_string)

https://github.com/seatgeek/fuzzywuzzy/blob/master/fuzzywuzzy/string_processing.py#L17

这会将 a_string 中的任何非字母数字替换为空格。

(?ui) 位有什么作用?没有它似乎可以正常工作。

谢谢

4

2 回答 2

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)标志会更改表达式的解析方式。它应该首先在表达式字符串中使用,或者在一个或多个空白字符之后使用。如果标志前有非空白字符,则结果未定义。

tl;dr (?u)在正则表达式中使用 unicode 并(?i)忽略大小写

于 2013-05-23T06:18:17.863 回答
6

uunicode 标志,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']
于 2013-05-23T06:19:14.750 回答