2013-12-05 4 views
1

Рассмотрим следующие строки:RegEx производить повторяющиеся строки

mastectomy N 
master NtVA 

Слова слева отделяются от одного или нескольких флагов справа (которые указывают на возможные части-из-речи (POS) для слова в вопросе, то есть: может ли это быть существительным, глаголом и т. д.). Два столбца разделены на вкладку.

Я пытаюсь достичь следующего списка через RegEx Поиск & Заменить в моем текстовом редакторе:

mastectomy N 
master N 
master t 
master V 
master A 

Цель состоит в том, чтобы сделать жизнь моей жизни легче работать со списком в Excel (для vlookups.) фактические данные 230K линии длинные и чувствительны к регистру (извлеченный из списка Moby)

пока что у меня есть это:.

[Найти] ([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

Сколько флагов у вас есть? Практически группировать флаги вместо слов? – Passerby

+0

regex, вероятно, не самый подходящий инструмент. – Benoit

+0

какой текстовый редактор вы используете? – JonM

ответ

1

Вы можете попробовать запустить замену, как это до тех пор, пока нет замены.

Используйте выражение:

^(.+?)(\t[a-z])([a-z]+) 

заменить:

\1\2\n\1\t\3 

и запустить его, пока ничто не может заменить.

1

Другой подход мог бы сделать эту работу из командной строки с помощью языка сценариев, как :

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 
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 $] 
Смежные вопросы