Python re.sub - 在上下文不匹配时替换字符

时间:2013-06-29 12:51:31

标签: python regex substitution

我正在尝试清理一些损坏的csv文件。一个问题是它们在数据字段中包含换行符,从而将一个数据集分成两部分。我正在寻找一条python代码,如果不跟随8位数字,它们就会消除换行符。到目前为止我的代码:

filetoparse = open('test.csv', encoding='utf-8')
data = filetoparse.read()

data = re.sub(r'\n(\d{8})',r'§§§\1',data)
data = re.sub(r'\n',r'',data)
data = re.sub(r'§§§','\n',data)

基本上我使用§§§作为正确换行的占位符,消除数据中的所有换行符,然后再次用换行符替换占位符。

它确实有效,但有没有办法更优雅地做到这一点?

1 个答案:

答案 0 :(得分:1)

使用negative lookahead pattern

data = re.sub(r'\n(?!\d{8})', '', data)

例如,

import re
data = '''
12345678 foo
bar
baz
12345678 foo
'''
data = re.sub(r'\n(?!\d{8})', '', data)

print(data)

产量

12345678 foobarbaz
12345678 foo