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) 位有什么作用?没有它似乎可以正常工作。
谢谢
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) 位有什么作用?没有它似乎可以正常工作。
谢谢
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)
忽略大小写
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']