2013-08-20 2 views
0

Может кто-нибудь изменить эту Regex, чтобы удалить слова, как в примере:Удалить Повторные Текст

Это не работает с статистом в нем ниже: (<.+?\/>)(?=\1)

<text><text>extra<words><text><words><something> 

должен превратиться в:

<text>extra<words><something> 

Thanks

+4

Какова ваша логика? Вы хотите отбросить все, кроме первого появления каждого ''? И, что очень важно, на каком языке вы хотите использовать этот шаблон? –

+0

Я бы использовал регулярное выражение для соответствия шаблону (назначение регулярного выражения), а затем добавьте его в массив, если массив еще не содержит совпадения. Тогда я бы просто развязал массив для вывода. Есть, вероятно, другие способы, но я думаю, что с любым методом регулярное выражение является компонентом решения, а не решением. – twinlakes

ответ

1

Это то, что я придумал с помощью lookbehinds и back referenc ES:

(<[^>]+>)(?<=\1.*\1) 

Это будет соответствовать любому экземпляр <tag> которому предшествует, по меньшей мере, одного другого экземпляра той же <tag>.

Например, чтобы использовать это в C#:

var input = "<text><text>extra<words><text><words><something>"; 
var output Regex.Replace(input, @"(<[^>]+>)(?<=\1.*\1)", ""); 
Console.WriteLine(output); // <text>extra<words><something> 

Однако, это не будет работать во многих разновидностях регулярных выражений. JavaScript, например, не поддерживает lookbehinds.

Смежные вопросы