我想替换所有出现超过一次的字符,我用Python的应用re.sub和我正则表达式看起来像这样data=re.sub('(.)\1+','##',data)
,但什么都没有发生......
这里是我的文字:为什么我的Python正则表达式不起作用?
文本
※※※※※※※※※※※※※※※※※章※※※※※※※※※※※※※※※※※※
这是开始时.. 。
我想替换所有出现超过一次的字符,我用Python的应用re.sub和我正则表达式看起来像这样data=re.sub('(.)\1+','##',data)
,但什么都没有发生......
这里是我的文字:为什么我的Python正则表达式不起作用?
文本
※※※※※※※※※※※※※※※※※章※※※※※※※※※※※※※※※※※※
这是开始时.. 。
您需要在这里使用原始字符串,1
被解释为八进制,然后在字符串中使用其整数等效的ASCII值。
>>> '\1'
'\x01'
>>> chr(01)
'\x01'
>>> '\101'
'A'
>>> chr(0101)
'A'
使用原始字符串来解决此:
>>> '(.)\1+'
'(.)\x01+'
>>> r'(.)\1+' #Note the `r`
'(.)\\1+'
使用原始字符串,所以正则表达式引擎会解释反斜杠而不是Python解析器。只要把r
在前面的字符串:
data=re.sub(r'(.)\1+', '##', data)
^this r is the important bit
否则,\1
被解释为字符值1,而不是反向引用。
'\ 1'被解释为八进制1,然后将其表示为'\ x01'(十六进制)。尝试'\ 141'的大小。 –