Skip to main content
 首页 » 编程设计

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

2025年05月04日9Terrylee

我正在尝试清理一些损坏的 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) 

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

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

请您参考如下方法:

使用 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