如何用vim将NumberInt(1)替换为1?

时间:2015-06-08 07:54:15

标签: regex vim replace

我想将ns = {'d': 'https://mws.amazonservices.com/Orders/2013-09-01'} for node in tree.findall('.//d:Order/d:SellerOrderId', ns): print node.text 替换为171-1322776-9700344 171-4214129-7148305 402-8263846-7042737 402-7017923-9474716 402-9691237-2887553 171-4614227-7597903 403-6729903-2119563 402-2184564-2676353 171-4520392-2088330 402-7986969-8827533 ,但我的文件中的字符串除外有一些工具:

NumberInt(1)

1

所以你可以看到,我想要替换NumberInt,除了包裹"bz":NumberInt(1), "batch": NumberInt(2), "something": "something else NumberInt(1)" "bz":NumberInt(1), "batch": NumberInt(2), "something": "something else NumberInt(2)" "bz":NumberInt(1), "batch": NumberInt(2), "something": "something else NumberInt(3)" "bz":NumberInt(1), "batch": NumberInt(2), "something": "something else NumberInt(4)" "bz":NumberInt(1), "batch": NumberInt(2), "something": "something else NumberInt(5)" "bz":1, batch: 1, "something": "something else NumberInt(1)" "bz":1, batch: 1, "something": "something else NumberInt(2)" "bz":1, batch: 1, "something": "something else NumberInt(3)" "bz":1, batch: 1, "something": "something else NumberInt(4)" "bz":1, batch: 1, "something": "something else NumberInt(5)"

1 个答案:

答案 0 :(得分:3)

您可以尝试:

:%s/\vNumberInt\((\d+)\)/\1/

使用非常神奇的模式(\v),对括号中的数字进行分组,并在替换部分中将其用作反向引用(\1):

它产生:

"bz":1, "something": "something else NumberInt(1)"
"bz":1, "something": "something else NumberInt(2)"
"bz":1, "something": "something else NumberInt(3)"
"bz":1, "something": "something else NumberInt(4)"
"bz":1, "something": "something else NumberInt(5)"

更新:使用其他工具,例如

sed 's/NumberInt(\([0-9]\+\))/\1/' infile

它产生的结果与以前相同。正则表达式类似,但使用[0-9]因为\d不兼容,并且因为它们并不特殊而逃避parens。

更新2 :请尝试以下操作:

sed 's/\(: *\)NumberInt(\([0-9]\+\))/\1\2/g' infile

它替换了以分号开头的所有NumberInt(),但它们之间没有双引号。