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

标签 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)

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

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

最佳答案

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

关于Python re.sub - 在上下文不匹配时替换字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17380390/

相关文章:

javascript - 如何使我的正则表达式匹配集达到最小程度?

regex - 正则表达式:(?!…)是什么意思?

bash 脚本 - 进程替换的变量扩展

Bash 变量替换和字符串

python - 我们如何在Python中进行DNS查询

Python如何循环获取数组中预先固定数量的元素

python - Snakemake:如何防止不明确的规则同时被执行?

Python 字符串文字到正则表达式对象

python - 值错误 : Series lengths must match to compare when matching dates in Pandas

string - 两个替换作为参数