我有一个包含以下内容的CSV文件:
57,13,"Bob, Bill and Susan",Student,Club,Funded,64,3200^M
Run Code Online (Sandbox Code Playgroud)
我需要他们看起来像
57,13,Bob-Bill-and-Susan,Student,Club,Funded,64,3200
Run Code Online (Sandbox Code Playgroud)
我正在使用vim正则表达式。我将其分为4个步骤:
删除^M并插入换行符:
:%s:<ctrl-V><ctrl-M>:\r:g`
Run Code Online (Sandbox Code Playgroud)全部替换为-:
:%s: :\-:g
Run Code Online (Sandbox Code Playgroud)删除引号之间的逗号:在此处需要帮助。
删除引号:
:%s:\"\([^"]*\)\":\1:g
Run Code Online (Sandbox Code Playgroud)如何删除引号之间的逗号,而不删除文件中的所有逗号?
像这样吗
:%s:\("\w\+\),\(\w\+"\):\1 \2:g
Run Code Online (Sandbox Code Playgroud)
我对此问题的首选解决方案(删除引号区域内的逗号)是使用带表达式的替换,而不是尝试在一个正则表达式中完成此操作。
为此,您需要在替换之前加上前缀,\=以使替换被视为vim表达式。在这里,您可以仅提取引号之间的部分,然后分别操作匹配的部分。这需要有两个简短的正则表达式,而不是一个复杂的正则表达式。
:%s/".\{-}"/\=substitute(submatch(0), ',', '' , 'g')/g
Run Code Online (Sandbox Code Playgroud)
因此".\{-}",将引号substitute(submatch(0), ',', '' , 'g')中的所有内容匹配(非贪婪),并采用匹配的内容并删除所有逗号,并将其返回值用作实际替换。
相关的帮助页面是:help sub-replace-special。
至于您问题的其他部分。步骤1本质上是尝试删除所有回车符,因为文件格式实际上是dos文件格式。您可以使用该dos2unix程序将其删除。
在步骤2 -中,不必在替换中使用。所以命令就是
:%s/ /-/g
Run Code Online (Sandbox Code Playgroud)
在第4步中,如果您要做的只是删除引号,则您的正则表达式过于复杂。由于您所需要做的就是匹配引号并将其删除
:%s/"//g
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1996 次 |
| 最近记录: |