我在re.sub:
中找到了这个有趣的问题import re
s = "This: is: a: string:"
print re.sub(r'\:', r'_', s, re.IGNORECASE)
>>>> This_ is_ a: string:
注意如何只替换前两个实例。似乎为标志添加[implicit]参数名称可以解决问题。
import re
s = "This: is: a: string:"
print re.sub(r'\:', r'_', s, flags=re.IGNORECASE)
>>>> This_ is_ a_ string_
我想知道是否有人可以解释它或者它实际上是一个错误。
我之前遇到过这个问题,缺少参数名string
,但从来没有flags
和字符串它通常会爆炸。
答案 0 :(得分:7)
re.sub
的第四个参数不是flags
而是count
:
>>> import re
>>> help(re.sub)
Help on function sub in module re:
sub(pattern, repl, string, count=0, flags=0)
Return the string obtained by replacing the leftmost
non-overlapping occurrences of the pattern in string by the
replacement repl. repl can be either a string or a callable;
if a string, backslash escapes in it are processed. If it is
a callable, it's passed the match object and must return
a replacement string to be used.
>>>
这意味着您需要明确地将flags=re.IGNORECASE
或其他re.IGNORECASE
视为count
的参数。
此外,re.IGNORECASE
标志等于2
:
>>> re.IGNORECASE
2
>>>
因此,通过在第一个示例中执行count=re.IGNORECASE
,您告诉re.sub
仅替换字符串中2
次出现的:
。