用Python中的正则表达式清理数字中的逗号

时间:2012-04-23 14:17:51

标签: python regex csv

我一直在谷歌搜索这个,但我不能真正缩小它。我试图解释一个csv文件的值,足够常见的行为。但我受到超过一千的价值的惩罚,即在引用中并且涉及逗号。我通过使用csv阅读器来解决它,它会从行中创建一个数字列表,但之后我必须选择逗号。

纯粹出于学术原因,是否有更好的方法来编辑带有正则表达式的字符串?从08/09/2010,"25,132","2,909",65008/09/2010,25132,2909,650

(如果你是Vim,基本上我想把Python放在这个: :1,$s/"\([0-9]*\),\([0-9]*\)"/\1\2/g:D)

4 个答案:

答案 0 :(得分:2)

使用csv模块进行第一阶段解析,使用正则表达式查看结果是否可以转换为数字。

import csv, re
num_re = re.compile('^[0-9]+[0-9,]+$')
for row in csv.reader(open('input_file.csv')):
  for el_num in len(row):
    if num_re.match(row[el_num]):
      row[el_num] = row[el_num].replace(',', '')

...虽然根本不使用正则表达式可能会更快:

for row in ([item.replace(',', '') for item in row]
            for row in csv.reader(open('input_file.csv'))):
  do_something_with_your(row)

答案 1 :(得分:1)

我认为您正在寻找的是,假设逗号只会出现在数字中,并且这些条目将始终被引用:

import re

def remove_commas(mystring):
    return re.sub(r'"(\d+?),(\d+?)"', r'\1\2', mystring)

更新: 在下面添加 cdarke 的评论,以下内容适用于任意长度的数字:

import re

def remove_commas_and_quotes(mystring):
    return re.sub(r'","|",|"', ',', re.sub(r'(?:(\d+?),)',r'\1',mystring))

答案 2 :(得分:0)

Python有一个正则表达式模块,“re”:

http://docs.python.org/library/re.html

但是,在这种情况下,您可能需要考虑使用“分区”功能:

>>> s = 'some_long_string,"12,345",more_string,"56,6789",and_some_more'
>>> left_part,quote_mark,right_part = s.partition(")
>>> right_part
'12,345",more_string,"56,6789",and_some_more'
>>> number,quote_mark,remainder = right_part.partition(")
'12,345'

string.partition(“character”)将一个字符串拆分为3个部分,第一次出现的是“character”,“character”本身和右边的东西。

答案 3 :(得分:0)

这是一个简单的正则表达式,用于从任意长度的数字中删除逗号:

re.sub(r'(\d+),?([\d+]?)',r'\1\2',mystring)