簡體   English   中英

替換CSV文件中數字的逗號

[英]Replacing comma for numerics in csv file

我有一個看起來像這樣的文件:

該文件用逗號分隔...但是,逗號也用於數字逗號。 好處是,我只需要刪除兩個數字之間的逗號即可:

a,b,100,000.00,2018-01-01,c
c,d,20,000.0,2017-12-01,e
e,f,1,000,000.00,2015-11-10,g

並將其轉換為:

a,b,100000.00,2018-01-01,c
c,d,20000.0,2017-12-01,e
e,f,1000000.00,2015-11-10,g

我正在考慮使用(?<=\\d),(?=\\d+\\.\\d+)但這僅照顧(1000)處的逗號而不是(1000000)處的逗號。 有沒有辦法遞歸地做到這一點? 或者,我可以兩次調用此替換。

您可以使用

import re
s="""a,b,100,000.00,2018-01-01,c
c,d,20,000.0,2017-12-01,e
e,f,1,000,000.00,2015-11-10,g"""
print( re.sub(r"(?<![^,])\d{1,3}(?:,\d{3})*(?:\.\d+)?(?![^,])", lambda x: x.group().replace(',',''), s) )

參見Python演示 輸出:

a,b,100000.00,2018-01-01,c
c,d,20000.0,2017-12-01,e
e,f,1000000.00,2015-11-10,g

圖案細節

  • (?<![^,]) -逗號必須立即出現在字符串的左側或開頭
  • \\d{1,3} -1至3位數字
  • (?:,\\d{3})* -0個或多個序列
    • , -逗號
    • \\d{3} -三位數
  • (?:\\.\\d+)? -可選的. 和1個以上的數字
  • (?![^,]) -逗號必須立即出現在字符串的右邊或結尾

使用lambda x: x.group().replace(',','')從發現的匹配項中刪除所有逗號lambda x: x.group().replace(',','')

使用正向回顧和超前regex

import re

s = 'a,b,100,000.00,c'
print(re.sub(r'(?<=\d),(?=\d)', '', s))
# a,b,100000.00,c

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM