2014-01-10 55 views
1

我想替换所有出现超过一次的字符,我用Python的应用re.sub和我正则表达式看起来像这样data=re.sub('(.)\1+','##',data),但什么都没有发生......
这里是我的文字:为什么我的Python正则表达式不起作用?

文本

※※※※※※※※※※※※※※※※※章※※※※※※※※※※※※※※※※※※

这是开始时.. 。

回答

3

您需要在这里使用原始字符串,1被解释为八进制,然后在字符串中使用其整数等效的ASCII值。

>>> '\1' 
'\x01' 
>>> chr(01) 
'\x01' 
>>> '\101' 
'A' 
>>> chr(0101) 
'A' 

使用原始字符串来解决此:

>>> '(.)\1+' 
'(.)\x01+' 
>>> r'(.)\1+' #Note the `r` 
'(.)\\1+' 
+1

'\ 1'被解释为八进制1,然后将其表示为'\ x01'(十六进制)。尝试'\ 141'的大小。 –

1

使用原始字符串,所以正则表达式引擎会解释反斜杠而不是Python解析器。只要把r在前面的字符串:

data=re.sub(r'(.)\1+', '##', data) 
      ^this r is the important bit 

否则,\1被解释为字符值1,而不是反向引用。

相关问题