2012-05-06 2 views
0

У меня есть длинный текст, и мне нужно изолировать одно слово между двумя другими словами.Исключая строку в Regex

Это часть текста, у меня есть:

2012-05-05 19:31:44 status config-files gwibber-service 3.4.0-0ubuntu4 
2012-05-05 19:31:44 status not-installed gwibber-service <none> 
2012-05-05 19:31:45 status installed gir1.2-notify-0.7 0.7.5-1 
2012-05-05 19:31:45 remove gir1.2-notify-0.7 0.7.5-1 <none> 
2012-05-05 19:31:45 status half-configured gir1.2-notify-0.7 0.7.5-1 
2012-05-05 19:31:45 status half-installed gir1.2-notify-0.7 0.7.5-1 

Теперь я хочу, чтобы выбрать все слова и числа excpet, что, к примеру:

gir1.2-notify-0.7 

поэтому я заменить их " «(пратически удалить все другие слова и цифры). что я думал, есть два ключевых слова, которые я могу использовать для их изоляции:« удалить »и« {некоторые номера и.) < нет > « все между ними должно быть исключая ...

Надеюсь, вы получили его. Спасибо за помощь.

ответ

0
r"\w[\w-]*[\.]{1}\w[\w-\.]*" /// -> it will match all strings of the form -> 

[один алфавитно-цифровые символы] [(ноль или-более буквенный-цифровой-chararcters-или - "-")]. [Один алфавитно-цифровые символы] [(ноль или-более алфавитно-цифровой -chararcters-or - "-")]

поэтому он будет соответствовать girl1.2-notify-0.7, но он не будет соответствовать службе gwibber.

0

Я не уверен, что я действительно понимаю ваш вопрос, но ...

используя следующее регулярное выражение: remove(.*)<none>$ $1 даст вам "gir1.2-уведомит-0.7"

Я не Не думаю, что вы сможете выбрать/заменить все EXCEPT $ 1 в одном заявлении, вам, вероятно, придется перевернуть некоторый код для обработки, основанный на результатах возврата регулярного выражения.

1

Попробуйте это:

(?<=remove)\s+([\w\.\-]+)\b 

Это не что иное, как простой positive look-behind подхода. Для лучшего понимания посетите here