python - Python 3 re.sub 的奇怪行为
问题描述
以下代码:
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>
您正在传递标志 re.IGNORECASE
(它具有2
if you的值print(int(re.IGNORECASE))
,尽管我怀疑在任何地方都没有强制要求)作为要使用的计数。
因此,它最多只能进行两次替换,即第二个示例中开头的逗号和空格。在您的第一个示例中也是如此,只是只有一个字符匹配而不是三个,所以您没有注意到。
相反,您应该使用:
>>> re.sub('[^a-zA-Z0-9]', '', ', Inc.', flags=re.IGNORECASE).lower()
'inc'
推荐阅读
- sql - Separate values of one column into multiple columns based on other column
- matlab - Does the order of inputs matter in MATLAB functions?
- ansible - 在ansible中使用with_sequence在with_subelement上循环
- selenium - Selenium Webdrive 所需的自动化建议
- python - Python Pandas new dataframe column with group by and condition
- flutter - Flutter TextField - how to shrink the font if the text entered overflows
- css - Changing the Visual Composer CSS path to prevent https errors
- jquery - JQuery JSON 键集自动完成
- r - 我怎样才能最干净地使用 Roxygen2 来记录 R 中的向量
- html - How to support HTML dom elements with RTL / LTR languages?