正则表达式修复csv引号

2024-09-29 23:20:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个简单的csv加引号,类似于:

"something","something","something","something",...

但是,有时候我用

"something","som"ething"","s"omething",...

我想创建一个正则表达式来解决这个问题,有人能提供什么吗?在

它将从不是数字或文本的字符串中取出所有内容,但是当我取出"时,我需要确保它不是绑定字符串的那些,因为我需要这些。。在

所以从"som"ething"","s"ometh8 ing"id expect=>;"something","someth8 ing"

太好了!在

谢谢!!在


Tags: csv字符串文本gtid内容数字something
2条回答

简单解决方案

Scala中的一个简单解决方案:

scala> val input = """"som"ething"","s"ometh8 ing""""
input: String = "som"ething"","s"ometh8 ing"

scala> val values = input.split("\",\"").map(_.filter(c => c.isLetterOrDigit || c.isWhitespace))
values: Array[String] = Array(something, someth8 ing)

scala> val output = values.mkString("\"", "\",\"", "\"")
output: String = "something","someth8 ing"

假设您的值中从来没有",",但是如果您有,那么无论如何也没有办法明确地修复您的CSV。在

这不是最佳的解决方案速度或内存,但它是短而简单的。在

编辑:正则表达式解决方案

如果您真的想要一些正则表达式,请享受:

^{pr2}$

这将尝试在输入的开头或结尾处匹配",或者","任何其他地方或任何认可的字符。如果其中任何一个匹配,它将转到第一个捕获组。否则,它匹配任何字符(.),但不在组中捕获它,因此第一个组保持为空。然后,匹配的子串替换为$1,这是第一个捕获组的内容。在

我仍然认为第一个解决方案更干净,更容易理解。在

import re
csv_string = '"something","som"ething"","s"omething"'
for each_str in re.findall(r'(.*?)[\,\n]', csv_string):
    print(re.sub(r'\"', '', each_str)

在字符串的末尾添加换行符,以便可以在中包含字符串的最后一部分芬德尔在

相关问题 更多 >

    热门问题