【发布时间】:2017-11-06 18:20:48
【问题描述】:
源txt文件:
34|Gurla Mandhata|7694|25243|2788|Nalakankar Himalaya|30°26'19"N
81°17'48"E|Dhaulagiri|1985|6 (4)|China
命令输入:
:%s/\(\d\+\)\(\d\d\d\)/\1,\2/g
命令输出:
34|Gurla Mandhata|7,694|25,243|2,788|Nalakankar Himalaya|30°26'19"N
81°17'48"E|Dhaulagiri|1,985|6 (4)|China
期望的输出:
34|Gurla Mandhata|7,694|25,243|2,788|Nalakankar Himalaya|30°26'19"N
81°17'48"E|Dhaulagiri|1985|6 (4)|China
基本上 1985 应该是 1985 而不是 1,985。我尝试放置一个\?,因此每次模式匹配时它都会停止并在之后放置一个°+,因此它必须检测° 以匹配模式,但没有成功。它只是替换了° 和之前的所有内容,一团糟。
我对正则表达式的了解与替代品相结合的知识很薄弱,我被困在这里。
编辑
前3个数字代表山的高度,这3个需要用(,)改变,最后一个数字(1985)代表年份,不能改变。 数学解决方案不会成为漏洞,因为有海拔低于 1900 的山脉
【问题讨论】:
-
1985与7694、25243和2788有何区别? -
一个数字可以 > 100 万吗?
标签: regex vim vi substitution