【问题标题】:How may I apply double quotes around every value of csv file using TextMate?如何使用 TextMate 在 csv 文件的每个值周围应用双引号?
【发布时间】:2011-04-03 08:53:51
【问题描述】:

我有一个格式如下的 csv 文件:

示例 csv:

bear,brown,mean,large
ant,black,strong,tiny
cat,yellow,moody,small

如何在每个值周围加上双引号?如何使用正则表达式完成此操作?

我正在使用 TextMate(文本编辑器)来使用正则表达式进行查找/替换。

【问题讨论】:

    标签: regex csv textmate


    【解决方案1】:

    这里是正则表达式的重要部分。希望我在转换为 textmate 格式时做对了:

    搜索 - ([^,]*)(,|$)

    替换 - "$1"$2

    搜索说明:查找每个不是逗号的字符,直到到达逗号或行尾。捕获要在一个变量中引用的字符串的匹配项,并在另一个变量中捕获逗号/行尾匹配项。

    替换说明:原始字符串、引号以及其后的逗号或换行符。

    【讨论】:

    • 这主要在记事本++中工作,但在每一行中省略了第一个引号和最后一个引号。这个堆栈溢出帖子修复了这个问题:stackoverflow.com/questions/11003761/notepad-add-to-every-line
    • @DrCord:对于我见过的几乎所有实现,正则表达式语法都略有不同,尤其是转义样式。纵观它,我看不到任何关于我的正则表达式不应该与正确转义一起工作的东西,假设您的查找/替换支持捕获、负字符类和“全局”匹配(即同一行中的多个匹配)查找/替换)。例如,如果您使用 VIM,则查找/替换命令变为::%s/\([^,]*\)\(,\|$\)/"\1"\2/g - 刚刚对其进行了测试,并且它适用于 OP 的示例 :) 也许您转义了引号或错误地捕获了引用?
    • 我的正则表达式的其他处理是它不会处理已经引用的东西,或者转义逗号。对于许多简单的 CSV,这就足够了。
    • 就像一个注释(对于这个古老且处理良好的问题),如果 CSV 在您不想在引号中包含的逗号(^,后面有一个空格)
    【解决方案2】:

    你可以从:

    find: ,
    replace: "," 
    

    然后在开头和结尾添加一个“?

    【讨论】:

    • 如果我没记错的话,我相信还有一种方法可以以相同的方式替换换行符(从而避免在每行的开头和结尾手动添加最终引号)。尽管文本编辑器之间的此类字符可能有所不同...无论如何,仅在文档的开头和结尾添加引号是不够的,因为这会将整个多行 CSV 文档转换为单行 CSV 文档。
    • 你是对的,textmate 正则表达式似乎支持 ^ 和 $ 之类的东西,也许可以用来解决这个问题:^(.*)$ => "$1"
    【解决方案3】:

    这对我很有用。是否首先查找/替换行

    然后对 , => ","

    进行简单的查找/替换

    必须添加第一个引号,添加“标记”很容易。

    谢谢,祝你好运。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      • 2016-04-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多