正则表达式修复csv报价

时间:2016-11-21 15:16:05

标签: python regex scala csv regex-negation

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

  

“东西”, “东西”, “东西”, “东西”,...

但有时我会用

获得csv
  

“东西”, “SOM” ething “”, “S” omething”,...

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

会从字符串中取出所有不是数字或文本的内容,但是当我取出"时,我需要确保它不是那些限制字符串的因为我需要那些...

所以来自"som"ething"","s"ometh8 ing" id expect => "something","someth8 ing"

我正在使用scala,但任何解决方案都会很棒!

谢谢!

2 个答案:

答案 0 :(得分:0)

简单解决方案

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

let setSliderIndex = this.setSlider.getActiveIndex();

假设您的价值观中没有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。

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

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

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

","

这会尝试在输入的开头或结尾处匹配scala> input.replaceAll("""(^"|"$|","|[\p{IsAlphabetic}\p{Digit}\p{Space}])|.""", "$1") res17: String = "something","someth8 ing" 或在其他任何地方或任何已批准的字符中匹配"。如果其中任何一个匹配,则转到第一个捕获组。否则,它匹配任何字符(","),但不会在组中捕获它,因此第一个组保持为空。然后,匹配的子字符串将替换为.,这是第一个捕获组的内容。

我仍然认为第一种解决方案更清晰,更容易理解。

答案 1 :(得分:0)

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)

在字符串的末尾添加换行符,以便您可以在re.findall中包含字符串的最后一部分

相关问题