Python替换引号内的',',但保留其他逗号,然后删除字符串中的引号

Posted

技术标签:

【中文标题】Python替换引号内的\',\',但保留其他逗号,然后删除字符串中的引号【英文标题】:Python replace ',' within quotes, but keep other commas, then remove the quotes in a stringPython替换引号内的',',但保留其他逗号,然后删除字符串中的引号 【发布时间】:2017-10-04 22:47:25 【问题描述】:

我目前有一个如下所示的字符串输出:

Shares Mil,"1,457","1,388","1,341","1,287","1,214","1,155","1,103","1,010",983,959,949

我需要它看起来像这样:

Shares Mil,1457,1388,1341,1287,1214,1155,1103,1010,983,959,949

基本上我想删除用引号括起来的数字中的逗号,然后能够使用.split(',') 将逗号分隔成一个列表。

我有一个想法,使用正则表达式在引号中查找逗号以删除逗号,然后使用 .replace('"','') 删除引号,但我不知道如何。

我可以用逗号.split() 并删除引号,然后手动加入分隔的数字,但必须有更有效的方法来做到这一点,所以我想我会寻求帮助。

谢谢!

【问题讨论】:

我在下面添加了一个依赖于regex 的解决方案,由于字符串中数据的非均匀性质,您将需要它。 (一些不带引号的数字,一些内引号;您不想要的字符串中的逗号,以及您确实想要的字符串外的逗号。仅使用split,这将相当复杂或不可能和replace 和条件逻辑。 【参考方案1】:

使用常用的 Python 字符串函数,没有一种简单的方法来区分要保留的逗号和要丢弃的逗号。

您需要使用regular expressions,又名regex,仅删除引用数字内的,

这里有一个online regex compiler 和another 来调试您的正则表达式。

这里是python的re.sub()函数,用于对正则表达式matches进行搜索和替换操作。

为此,您还需要在文件顶部输入import re。您无需下载或安装任何东西即可执行此操作,因为它是 Python 的一部分。

import re

input_str = 'Shares Mil,"1,457","1,388","1,341","1,287","1,214","1,155","1,103","1,010",983,959,949'
desired_output_str = 'Shares Mil,1457,1388,1341,1287,1214,1155,1103,1010,983,959,949'

# use regex to *only* remove commas that are part of a number within a string
# matches commas that are followed immediately by a one or more digits and then double-quote
regex_pattern = r',(?=\d+")'

# we want to replace *those* commas with empty string (aka delete them)
replacement = ''

comma_less_numbers_str = re.sub(regex_pattern, replacement, input_str)
print(comma_less_numbers_str, "\n")

# now it's easy: just remove the "
output_str = comma_less_numbers_str.replace('"', '')

print(output_str)
print(output_str == desired_output_str)
print(desired_output_str)

repl.it for this solution

Regex 非常强大,而且比您想象的更容易派上用场。它简化了您将遇到的许多任务。 我强烈建议您花一天时间来熟悉它的命名法。 这实际上很容易,一旦你开始看它。 我在上面链接了文档。 您还可以在手机上下载一个应用程序,以便在业余时间快速学习正则表达式。

【讨论】:

以上是关于Python替换引号内的',',但保留其他逗号,然后删除字符串中的引号的主要内容,如果未能解决你的问题,请参考以下文章

使用逗号拆分字符串,但忽略双引号内的逗号 - javascript

如何使用 C# 和正则表达式删除引号 (") 内的所有逗号

仅当它在 Pig 中的内部引号(“”)时才替换逗号(,)

用逗号和空格分隔字符串,但保留带引号的字符串

hive导入csv文件,字段中双引号内有逗号

Clojure CSV 解析引号中的逗号