首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Regex用于清除csv中容易混淆的字符

Regex用于清除csv中容易混淆的字符
EN

Stack Overflow用户
提问于 2017-01-12 21:36:00
回答 3查看 405关注 0票数 1

我的问题是:

我使用的csv来自一些软件,问题是这个软件不能很好地处理csv,因为在csv中有一些字符串包含引号,并且字符串的包装也是引号,所以我在解析它时遇到了问题。

所以这是正常的csv:

代码语言:javascript
运行
复制
"one","two","three"

下面是我的案例:

代码语言:javascript
运行
复制
"one","tw"o","three"

所以我在解析像"tw"o"这样的字符串时遇到了问题。这基本上是输出文件的软件的问题,我无法编辑该软件。

所以我想我可以创建一个正则表达式,它将接受不必要的引号或逗号,并确保每个字符串都用引号括起来,并用逗号分隔,有人知道我如何实现它吗?

我正在使用scala的tototoshi库

EN

回答 3

Stack Overflow用户

发布于 2017-01-12 21:46:25

我尝试了Python csv模块,它能够做到这一点(听起来像是一个技巧,但毕竟输入文件是错误的,使用正则表达式也是一个技巧):

代码语言:javascript
运行
复制
import csv

z = '''"one","tw"o","three"'''

cr = csv.reader([z])
print(next(cr))

结果:

代码语言:javascript
运行
复制
['one', 'two"', 'three']

由于某种原因,引号被移到了字符串的末尾(在字段中放入双引号的有效方法是将其加倍)。

要删除它,您可以执行以下操作

代码语言:javascript
运行
复制
print([x.replace('"',"") for x in next(cr)])

要获得

代码语言:javascript
运行
复制
['one', 'two', 'three']

请注意,csv将使用"one","tw",o","three"发出4个字段,因此如果引号后面是逗号,则什么都不起作用,只有人工验证可以修复此问题。

票数 1
EN

Stack Overflow用户

发布于 2017-01-12 22:30:17

一个非常简单的正则表达式解决方案可能适用于您:

正则表达式:(?<=\w)"(?=\w) //global flag

替换:'' //blank string

只要我们能看到那些被字母数字括起来的“坏”双引号,它就会起作用。它只是向后查找字母数字、双引号和向前查找字母数字。它不会匹配用反斜杠或另一个双引号转义的双引号,所以""\"就可以了。

demo here

票数 0
EN

Stack Overflow用户

发布于 2017-01-13 15:00:47

看起来您无法预测使用未转义的引号可能会得到什么样的值。没有办法用正则表达式可靠地清理这个问题。

也许可以试试univocity-parsers,因为它有一个CSV解析器,可以正确地处理这类输入。示例:

代码语言:javascript
运行
复制
    //first configure the parser
    CsvParserSettings settings = new CsvParserSettings();

    //override the default unescape quote handling. This seems more appropriate for your case.
    settings.setUnescapedQuoteHandling(UnescapedQuoteHandling.STOP_AT_CLOSING_QUOTE);

    //then create a parser and parse your input line:
    CsvParser parser = new CsvParser(settings);
    List<String[]> results = parser.parseAll(<your input here>);

希望能有所帮助。

免责声明:我是这个库的作者。它是开源和免费的(Apachev2.0许可证)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41614633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档