Python 3 re.sub的奇怪行为

问题描述 投票:2回答:1

以下代码:

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

为什么?

python python-3.x regex re
1个回答
2
投票

从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.IGNORECASE2,尽管我怀疑没有在任何地方强制使用)作为count使用。

因此,它最多只能进行两个替换,即第二个示例中逗号和开头的空格。在您的第一个示例中,它[做到了,只是匹配了一个字符而不是三个字符,所以您没有注意到。

相反,您应该使用:

>>> re.sub('[^a-zA-Z0-9]', '', ', Inc.', flags=re.IGNORECASE).lower() 'inc'

© www.soinside.com 2019 - 2024. All rights reserved.