Regex Vim:将一行上的正则表达式匹配替换为同一行中的另一个正则表达式匹配
您好:我正在尝试使用搜索/替换“透视”vim中的一些值,但似乎被卡住了 考虑以下文件:Regex Vim:将一行上的正则表达式匹配替换为同一行中的另一个正则表达式匹配,regex,vim,Regex,Vim,您好:我正在尝试使用搜索/替换“透视”vim中的一些值,但似乎被卡住了 考虑以下文件: key1: value1, value2, value3, ... valueN\n key2: valueA, valueB, valueC,...valueX\n ... 我试图转换每一个“,”和“键”在那一行,后面是一个换行符 因此,输出将是: value1:key1\n value2:key1\n value3:key1\n ... valueN:key1\n valueA:key2\n value
key1: value1, value2, value3, ... valueN\n
key2: valueA, valueB, valueC,...valueX\n
...
我试图转换每一个“,”和“键”在那一行,后面是一个换行符
因此,输出将是:
value1:key1\n
value2:key1\n
value3:key1\n
...
valueN:key1\n
valueA:key2\n
valueB:key2\n
...
我不知道如何用第一个匹配替换正则表达式匹配(','在本例中)
我试过:
:%s/\(^.\{-}\): \(.\{-}\),/\2:\1\r
但这只会替换第一次出现的“,”
如何将每行出现的“,”替换为\1
谢谢 我认为使用宏或vimscript是可能的,但如果
perl
解决方案适合您
$ cat ip.txt
key1: value1, value2, value3, valueN
key2: valueA, valueB, valueC, valueX
$ perl -pe 's/^([^:]+):\s*(.*)/$2/; $k=$1; s/(value\w+),?\s*/$1:$k\n/g' ip.txt
value1:key1
value2:key1
value3:key1
valueN:key1
valueA:key2
valueB:key2
valueC:key2
valueX:key2
如果输出符合预期,请将
perl-pe
更改为perl-i-pe
进行就地编辑我认为可以使用宏或vimscript,但如果perl
解决方案适合您
$ cat ip.txt
key1: value1, value2, value3, valueN
key2: valueA, valueB, valueC, valueX
$ perl -pe 's/^([^:]+):\s*(.*)/$2/; $k=$1; s/(value\w+),?\s*/$1:$k\n/g' ip.txt
value1:key1
value2:key1
value3:key1
valueN:key1
valueA:key2
valueB:key2
valueC:key2
valueX:key2
如果输出符合预期,请将
perl-pe
更改为perl-i-pe
进行就地编辑您试图一次完成太多的事情,但如果您坚持以下要求,可以使用Vim完成:
:%s/\v\s*(\w+):\s*(.*)/\=substitute(submatch(2), '\v\s*%(,\s*|$)', ':' . submatch(1) . '\n', 'g')/
输入:
key1: value1, value2, value3
key2: valueA, valueB, valueC
输出:
value1:key1
value2:key1
value3:key1
valueA:key2
valueB:key2
valueC:key2
您试图一次做太多的事情,但如果您坚持,可以使用Vim完成:
:%s/\v\s*(\w+):\s*(.*)/\=substitute(submatch(2), '\v\s*%(,\s*|$)', ':' . submatch(1) . '\n', 'g')/
输入:
key1: value1, value2, value3
key2: valueA, valueB, valueC
输出:
value1:key1
value2:key1
value3:key1
valueA:key2
valueB:key2
valueC:key2
谢谢我可以用一种“语言”(perl/python…)完成这项工作,但我希望用vim以交互方式完成…@AaCc,所以Sato的答案应该是:)谢谢。我可以用一种“语言”(perl/python…)完成这项工作,但我希望用vim以交互方式完成…@AaCc,所以Sato的答案应该是:)谢谢!将深入研究替代和子匹配功能。非常有帮助,谢谢!将深入研究替代和子匹配功能。非常有用。