以下代码:
import re
print(re.sub('[^a-zA-Z0-9]', '', ',Inc.', re.IGNORECASE).lower())
print(re.sub('[^a-zA-Z0-9]', '', ', Inc.', re.IGNORECASE).lower())
产生:
inc
inc.
https://repl.it/repls/RightThankfulMaintenance
为什么?
从doco,re.sub
签名是:
re.sub(pattern, repl, string, count=0, flags=0)
所以,让我们根据以下内容检查您的通话:
re.sub('[^a-zA-Z0-9]', '' , ', Inc.', re.IGNORECASE) # default
# < pattern > <repl> <string> < count > <flags>
因此,您将flag re.IGNORECASE
(2
,尽管我怀疑没有在任何地方强制使用)作为count使用。
因此,它最多只能进行两个替换,即第二个示例中逗号和开头的空格。在您的第一个示例中,它[做到了,只是匹配了一个字符而不是三个字符,所以您没有注意到。
相反,您应该使用:>>> re.sub('[^a-zA-Z0-9]', '', ', Inc.', flags=re.IGNORECASE).lower()
'inc'