替换重复的单词,不区分大小写

时间:2016-06-27 13:04:01

标签: python regex python-3.x

样品:

>>> line = 'the the, To to'
>>> re.findall(r'\b(\w+) \1', line)
['the']
>>> re.findall(r'\b(\w+) \1', line, re.I)
['the', 'To']

>>> re.sub(r'\b(\w+) \1', r'\1', line, re.I)
'the, To to'

预期:

'the, To'

正则表达式适用于其他地方,如

  • Vim:s/\v<(\w+) \1/\1/gi
  • Perl:s/\b(\w+) \1/$1/gi
  • sed:-r 's/\b(\w+) \1/\1/gi'


这是一种已知行为吗?什么是变通方法?我的Python版本是3.4.3,如果这有所不同。

1 个答案:

答案 0 :(得分:3)

阅读the definition of re.sub

  

re.sub(pattern,repl,string,count = 0,flags = 0)

您将re.I作为count传递(最多允许2次替换),而不是flags。相反,尝试:

>>> re.sub(r'\b(\w+) \1', r'\1', s, flags=re.I)
                                  # ^ note
'the, To'