对不起标题,但我无法找到更好的词组方式。我所拥有的是一个看起来像这样的结构(每个缩进组的大小都是artbitrary,就像它们之间的填充大小一样):
q
111:
a
b
c
w
e
222:
d
e
f
g
r
我想将其转换为如下所示:
q
111: a
111: b
111: c
w
e
222: d
222: e
222: f
222: g
r
我目前正在做的是:1)搜索每个缩进组的最后一个标签,并将其替换为'标题&#39 ;; 2)在最大缩进组中每个项目重复整个过程一次; 3)手动删除标题。不用说,这感觉非常像黑客。这是我第一步使用的正则表达式:^([^\n]*:)(.*?)\t(?![^\n]*?\n\t) → \1\2\1[ ]
我真正喜欢的是立刻替换每个缩进组中的所有选项卡,但我找不到任何方法来执行此操作。我使用的是Python(或者更确切地说是使用此库的Sublime Text正则表达式插件)。
答案 0 :(得分:2)
我不确定正则表达式是否是此处使用的最佳工具。我会使用更尖锐的文本处理工具,如awk
。
{
if (match($0, /^[0-9]+:$/)) {
num = $1;
}
else if(match($0, /^[ ]+[a-z]$/)) {
print num, $NF;
}
else {
print $0;
}
}
您可以像这样运行:
$ awk -f /tmp/script.awk </tmp/file.ext
输出:
q
111: a
111: b
111: c
w
e
222: d
222: e
222: f
222: g
r
script.awk
是上述代码段,file.ext
是您需要处理的文件。
答案 1 :(得分:0)
如果您正在使用Python,那么另一种方法就是循环遍历这些行并构建您的结果:
import re
res = []
key = ''
for s in input.splitlines():
if s.endswith(':'):
key = s
else:
res.append(re.sub('^\\t', key, s))
res = '\n'.join(res)
print(res)