python 3正则表达式模式替换

时间:2014-11-09 19:49:10

标签: python regex csv newline

我有一个格式错误的csv文件需要修复:

  • 该文件应该每行有一条记录,但由于这种格式化问题,它有一个MS-DOS换行符(^M)。
  • 更糟糕的是,CSV文件的最后一个字段是一个文本字段,它还包含这个MS-DOS换行符,所以我不能简单地替换^M字符。
  • 但好消息是文件的第一个字段是DATE字段(MM/DD/YY

所以我尝试将(\r\nMM/DD/YY)模式替换为(\rMM/DD/YY),但它不起作用。这是我的代码片段:

fixed_content = re.sub(r"""\r\n\d{2})/\d{2}/\d{2}""", r"""\r\1/\2/\3""", malformed_content)

我的问题是:

  1. 我不知道如何将^M字符表示为模式。我使用了\r\n
  2. 我不知道如何在新的替换模式中引用先前的匹配。我将\1用于第一个MM模式,\2用于下一个DD模式,\3用于最后YY模式。

1 个答案:

答案 0 :(得分:1)

要匹配DD/MM/YY形式的日期字符串,您可以使用以下正则表达式:

 \d{2}\/\d{2}\/\d{2}

如果您想要backreference匹配的字符串,则必须将它放在括号(...)之间,如下所示:

 (\d{2}\/\d{2}\/\d{2})

整体替换命令将变为:

fixed_content = re.sub(r"""\r\n(\d{2}\/\d{2}\/\d{2})""", r"""\r\1""", malformed_content)

请注意,我有时需要反斜杠\/,因为反斜杠被用作匹配/替换字符串之间的分隔符。修改以满足您的需求。