2014-10-31 5 views
0

У меня есть целая куча строк, которые мне нужно очиститьматч Regex каждая строка

35653_3100552_26952012_cmp.xml.gz 
    35653_3100552_26952012_cmp_delta.xml.gz 
    35653_3100552_26952012_cmp_deltatemplate.txt.gz 
    35653_3100552_26952012_cmp_template.txt.gz 
    35653_3100552_26952030_cmp.xml.gz 
    35653_3100552_26952030_cmp_delta.xml.gz 
    35653_3100552_26952030_cmp_deltatemplate.txt.gz 
    35653_3100552_26952030_cmp_template.txt.gz 
    35653_3100552_26952044_cmp.xml.gz 
    35653_3100552_26952044_cmp_delta.xml.gz 
    35653_3100552_26952044_cmp_deltatemplate.txt.gz 
    35653_3100552_26952044_cmp_template.txt.gz 
    35653_3100552_26952063_cmp.xml.gz 
    35653_3100552_26952063_cmp_delta.xml.gz 
    35653_3100552_26952063_cmp_deltatemplate.txt.gz 
    35653_3100552_26952063_cmp_template.txt.gz 
    35653_3100552_26952075_cmp.xml.gz 
    35653_3100552_26952075_cmp_delta.xml.gz 
    35653_3100552_26952075_cmp_deltatemplate.txt.gz 
    35653_3100552_26952075_cmp_template.txt.gz 
    35653_3100552_26952086_cmp.xml.gz 
    35653_3100552_26952086_cmp_delta.xml.gz 
    35653_3100552_26952086_cmp_deltatemplate.txt.gz 
    35653_3100552_26952086_cmp_template.txt.gz 
    35653_3100552_26952105_cmp.xml.gz 
    35653_3100552_26952105_cmp_delta.xml.gz 
    35653_3100552_26952105_cmp_deltatemplate.txt.gz 
    35653_3100552_26952105_cmp_template.txt.gz 

Я просто хочу, чтобы те, заканчивая cmp.xml.gz Все остальное я хочу удалить, а также удаление пустых пространств ,

Я пробовал это 35653(.*)cmp_delta.xml.gz, но это просто выбирает все, начиная с 2-й строки до последней строки.

Так что мой вопрос в том, какое регулярное выражение можно использовать для удаления каждой строки, которая не заканчивается cmp_delta.xml.gz?

Btw, я буду использовать это регулярное выражение внутри Coda.

Благодаря

Update

Попробовав регулярное выражение, предоставленную Кендалла и ключ в ответах ниже, это результат в Coda

35653_3100552_26952012_cmp.xml.gz.lmp 
    .lmp 
    35653_3100552_26952012_cmp_deltatemplate.txt.gz.lmp 
    35653_3100552_26952012_cmp_template.txt.gz.lmp 
    35653_3100552_26952030_cmp.xml.gz.lmp 
    .lmp 
    35653_3100552_26952030_cmp_deltatemplate.txt.gz.lmp 
    35653_3100552_26952030_cmp_template.txt.gz.lmp 
    35653_3100552_26952044_cmp.xml.gz.lmp 
    .lmp 
    35653_3100552_26952044_cmp_deltatemplate.txt.gz.lmp 
    35653_3100552_26952044_cmp_template.txt.gz.lmp 
    35653_3100552_26952063_cmp.xml.gz.lmp 
    .lmp 
    35653_3100552_26952063_cmp_deltatemplate.txt.gz.lmp 
    35653_3100552_26952063_cmp_template.txt.gz.lmp 
    35653_3100552_26952075_cmp.xml.gz.lmp 
    .lmp 
    35653_3100552_26952075_cmp_deltatemplate.txt.gz.lmp 
    35653_3100552_26952075_cmp_template.txt.gz.lmp 
    35653_3100552_26952086_cmp.xml.gz.lmp 
    .lmp 
    35653_3100552_26952086_cmp_deltatemplate.txt.gz.lmp 
    35653_3100552_26952086_cmp_template.txt.gz.lmp 
    35653_3100552_26952105_cmp.xml.gz.lmp 
    .lmp 
    35653_3100552_26952105_cmp_deltatemplate.txt.gz.lmp 
    35653_3100552_26952105_cmp_template.txt.gz.lmp 
+0

Какой синтаксис вы используете: .NET regex, Perl regex и т. Д.? –

ответ

2

Это регулярное выражение не будет соответствовать более одной строке в режиме по умолчанию, так как . не соответствует новой строке. Единственный способ, которым он будет соответствовать, - это регулярное выражение в режиме «однострочный», что означает, что .делает соответствует новым строкам.

Если Coda позволяет вам отключить однолинейный режим (это не то же самое, что включать многострочный режим, регулярное выражение может использовать оба режима, либо нет).

Если Coda не дает возможности изменить однострочный флаг, вы можете эмулировать . с помощью [^\r\n].

35653[^\r\n]*cmp_delta\.xml\.gz 

Update:

Если вы можете использовать многострочный режим в Coda, включите что и добавить $ до конца регулярного выражения.

Если нет, вы можете найти успех, если добавить (?=[\r\n]) в конец. Я не знаю, что поддерживает Coda, поэтому я не могу точно сказать, что будет работать.

Хотя, если каждая строка заканчивается .lmp, просто добавление \.lmp в конец регулярного выражения имеет больше смысла.

Update:

Представляется, что лучшим решением в Coda, чтобы заменить все строки, не заканчивающиеся cmp_delta.xml.gz.lmp с пустой строкой.

35653[^\r\n]*(?=[\r\n])(?<!cmp_delta\.xml\.gz\.lmp) 
+0

Я обновил вопрос с результатами, используя приведенное выше regex – user2028856

+0

Я не могу найти в google какое-либо упоминание о многострочном режиме для коды. Вы сказали добавить (? = [\ R \ n]) до конца, извините за вопрос noob, но добавьте в конец где? – user2028856

+0

Как насчет другого способа, мне удалось использовать find и replace, чтобы удалить все остальные конечные элементы. Возможно ли иметь регулярное выражение для соответствия всем, кроме строк, заканчивающихся «cmp.xml.gz.lmp». – user2028856

0

Выполните поиск и замену. Найдите ^.*(?<!cmp\.xml\.gz)$\n? и ничего не замените.

+0

Это заменяет все ... – user2028856

+0

Нет, он просто удаляет строки, не заканчивающиеся на «cmp.xml.gz». – Geert

+0

Я только что пробовал это и, к сожалению, все это удаляет – user2028856

1

Попробуйте

35653(.*?)cmp_delta.xml.gz 

Вместо вашего

35653(.*)cmp_delta.xml.gz 

Лишний '?' заставляет «*» действовать не-жадным, то есть он будет соответствовать наименьшему количеству символов.

В других терминах, когда вы используете 35653(.*)cmp_delta.xml.gz, вы соответствуете «35653» по первому вхождению и последнему вхождению «cmp_delta.xml.gz» всей последовательности.

Вместо этого 35653(.*?)cmp_delta.xml.gz будет соответствовать «35653» в первом вхождении и до первого появления «cmp_delta.xml.gz».