我具有1000行的文件,在每个第5行至8列由:
与正则表达式交换柱在vi不使用AWK,读取,等等
1:2:3:4:5:6:7:8
4g10:8s:45:9u5b:a:z1
分离我想在一些所有行order 4:3:1:2:5:6:7...
我该如何仅用正则表达式交换前4列?
我具有1000行的文件,在每个第5行至8列由:
与正则表达式交换柱在vi不使用AWK,读取,等等
1:2:3:4:5:6:7:8
4g10:8s:45:9u5b:a:z1
分离我想在一些所有行order 4:3:1:2:5:6:7...
我该如何仅用正则表达式交换前4列?
我想,这可能会更容易与其他的方法去做,但你可以使用ex
做到这一点,所以在命令行模式,输入:
:%s/^\([^:]\+\):\([^:]\+\):\([^:]\+\):\([^:]\+\):/\4:\3:\1:\2:/
这将为前4个冒号分隔的字段创建捕获组,然后以不同于最初存在的顺序替换它们。
@ondrej好抓,现在我在这里修好了 –
这里是一个正则表达式是应该做的,你在找什么:
newtext = re.sub("([^:]+):([^:]+):([^:]+):([^:]+)(:)?(.*)?",r"\4:\3:\1:\2\5\6",text)
该带走的是你要使用parans捕捉,然后按顺序重新排列你希望他们在更换。每个捕捉“基团”是只是一个或多个非:由分隔:如果存在空的组的可能性改变每个+到*
这里是为了清楚起见在Python样品:
import re
textlist = [
"1:2:3:4:5:6:7:8",
"1:2:3:4:5",
"1:2:3:4",
]
for text in textlist:
newtext = re.sub("([^:]+):([^:]+):([^:]+):([^:]+)(:)?(.*)?",r"\4:\3:\1:\2\5\6",text)
print (newtext)
输出:
4:3:1:2:5:6:7:8
4:3:1:2:5
4:3:1:2
不清楚,请在代码标签中添加更多示例Input_file和期望的输出。 – RavinderSingh13