Python 3 re.sub的奇怪行为

2024-05-28 20:05:53 发布

您现在位置:Python中文网/ 问答频道 /正文

以下代码:

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

为什么?


Tags: 代码httpsimportreitrepllowerinc
1条回答
网友
1楼 · 发布于 2024-05-28 20:05:53

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>

您正在传递标志re.IGNORECASE(如果您print(int(re.IGNORECASE)),它的值为2,尽管我怀疑这在任何地方都不是强制的)作为要使用的计数

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

相反,您应该使用:

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

相关问题 更多 >

    热门问题