带有unicode标志的python正则表达式长度问题
我正面临一个奇怪的正则表达式问题。这是一个用空格替换a-z的简单正则表达式。但它只能替换到某一固定长度带有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 运行此代码时,输出为
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
如何“出现”不完全做同样的事情。。。我能找到其中的任何一个吗?如果你找不到刚刚标记的问题的答案,请相应地编辑。