Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何使用TextMate在csv文件的每个值周围应用双引号?_Regex_Csv_Textmate - Fatal编程技术网

Regex 如何使用TextMate在csv文件的每个值周围应用双引号?

Regex 如何使用TextMate在csv文件的每个值周围应用双引号?,regex,csv,textmate,Regex,Csv,Textmate,我有一个csv文件,格式如下: 示例csv: bear,brown,mean,large ant,black,strong,tiny cat,yellow,moody,small 如何在每个值周围使用双引号?我如何使用正则表达式来实现这一点 我正在使用TextMate(文本编辑器)查找/替换正则表达式。您可以从以下内容开始: find: , replace: "," 然后在开始和结束处添加一个“以下是正则表达式的重要部分。希望我在转换为textmate格式时能正确使用它: 搜索-([^,]

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

示例csv:

bear,brown,mean,large
ant,black,strong,tiny
cat,yellow,moody,small
如何在每个值周围使用双引号?我如何使用正则表达式来实现这一点

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

您可以从以下内容开始:

find: ,
replace: "," 

然后在开始和结束处添加一个“

以下是正则表达式的重要部分。希望我在转换为textmate格式时能正确使用它:

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

替换-
“$1”$2

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


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

这对我来说非常有用。是否先查找/替换行

然后简单地查找/替换,=>“,”

必须添加第一个引号,添加“标记”使其变得简单


谢谢,祝你好运。

如果我没有弄错的话,我相信也有一种方法可以用同样的方式替换换行符(从而避免在每行的开始和结束处手动添加最终引号)。尽管文本编辑器中的这些字符可能有所不同……但在任何情况下,仅在文档的开头和结尾添加引号都是不够的,因为这样会将整个多行CSV文档转换为单行CSV文档。您是对的,textmate regexps似乎支持^和$之类的内容,可能可以用来解决以下问题:^(.*)$ => "$1"这主要在记事本++中起作用,但在每一行中都保留了第一个引号和最后一个引号。这篇堆栈溢出文章修正了这一点:@DrCord:Regex语法对于我所见过的几乎每个实现都略有不同,尤其是转义样式。综观这篇文章,我没有看到任何关于我的Regex的内容不应该与正确的转义一起工作g、 假设您的find/replace支持捕获、负字符类和“全局”匹配(即,在单个find/replace中同一行上有多个匹配)。例如,如果您使用的是VIM,find/replace命令将变为:
:%s/\([^,]*\)\(,\\\$\)/“\1”\2/g
-刚刚测试过它,它与OP的示例一起工作:)也许你漏掉了你的引号或者捕捉到了错误的引用?我的正则表达式的另一个特点是它不能处理已经被引用的东西,或者漏掉的逗号。对于许多简单的CSV,这就足够了。作为一个注释(对于这个古老且处理良好的问题),如果CSV在逗号后有一个前导空格,而您不想在引号中包含该空格,([^,]*)(,|$)