带有unicode标志的python正则表达式长度问题

带有unicode标志的python正则表达式长度问题,python,regex,unicode,Python,Regex,Unicode,我正面临一个奇怪的正则表达式问题。这是一个用空格替换a-z的简单正则表达式。但它只能替换到某一固定长度 import re s = 'aaaaaaaaaaaaabbbbbbbbbbbbbbbbbccccccccccccccccccdddddddddddddddddd' s = unicode(s, 'utf-8') s = re.sub(r'[a-z]', ' ', s, re.UNICODE) print s 运行此代码时,输出为

我正面临一个奇怪的正则表达式问题。这是一个用空格替换a-z的简单正则表达式。但它只能替换到某一固定长度

import re

s = 'aaaaaaaaaaaaabbbbbbbbbbbbbbbbbccccccccccccccccccdddddddddddddddddd'
s = unicode(s, 'utf-8')
s = re.sub(r'[a-z]', ' ', s, re.UNICODE)
print s
运行此代码时,输出为

                                ccccccccccccccccdddddddddddddddddd

如果我删除
re.UNICODE
标志,那么它可以正常工作。有人能解释一下为什么会发生这种情况吗。

,如您所见,第四个位置参数是
count
。尝试执行
re.sub(r'[a-z]','',s,flags=re.UNICODE)
re.sub的第四个参数是
count
。如果要指定
标志
,则应将其改为关键字参数:

s = re.sub(r'[a-z]', ' ', s, flags=re.UNICODE)

我认为您需要执行
flags=re.UNICODE
,因为参数位置是要执行的替换数。。。它的签名是:
re.sub(pattern,repl,string,count=0,flags=0)
…是的:
re.UNICODE
等同于
32
,所以它只替换了前32个字符。我已经看到过几次,并回答了编译表达式上的
.sub
,以及
re.sub
如何“出现”不完全做同样的事情。。。我能找到其中的任何一个吗?如果你找不到刚刚标记的问题的答案,请相应地编辑。