请考虑以下几行:
mastectomy N
master NtVA
左边的单词与右边的一个或多个标志分开(表示相关单词的可能词性(POS),即:它是否可以是名词,动词等)两列是制表符分隔的。
我正试图通过RegEx Search& amp;在我的文本编辑器中替换:
mastectomy N
master N
master t
master V
master A
目标是让生活更轻松,使用Excel中的列表(对于vlookups)。实际数据长度为230K行且区分大小写(从Moby List中提取。)
到目前为止,我得到的是:
[查找] ([a-z]+)\t([a-z]?)([a-z]?)([a-z]?)([a-z]?)
[替换] \1\t\2\n\1\t\3\n\1\t\4\n\1\t\5
但这不是很优雅也不灵活,并且只为只有1个标志的单词产生无用的行。
我该如何改进?
谢谢 -
法比安
答案 0 :(得分:1)
你可以尝试运行这样的替换,直到没有替换。
使用表达式:
^(.+?)(\t[a-z])([a-z]+)
替换为:
\1\2\n\1\t\3
并运行它直到无法替换任何内容。
答案 1 :(得分:1)
另一种方法可能是使用脚本语言perl从命令行完成工作:
perl -ane '
@f = split //, $F[1];
printf qq|%s\t%s\n|, $F[0], shift @f while @f;
' infile
它产生:
mastectomy N
master N
master t
master V
master A
答案 2 :(得分:1)
我有一个使用awk的简单解决方案:
#!/bin/gawk -f
NF==2 {
STR=$2
while(length(STR)>0){
firstletter=substr(STR, 1, 1);
print $1" "firstletter;
STR=substr(STR, 2, length(STR));
}
}
给出:
[col_expand $] cat input.dat
mastectomy N
master NtVA
[col_expand $]
[col_expand $] ./col_expand.awk input.dat
mastectomy N
master N
master t
master V
master A
[col_expand $]