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替换引号内的',',但保留其他逗号,然后删除字符串中的引号的主要内容,如果未能解决你的问题,请参考以下文章