2012-04-08 3 views
1

Je cherche à supprimer les phrases en double de n'importe quelle chaîne.Suppression d'une phrase en double

Exemple:

My_First_Post_My_First_Post.htm 

aurait l'expression "My_First_Post" là-dedans deux fois, devenant ainsi:

My_First_Post_.htm 

un moyen facile de faire cela?

+5

Combien de temps une sous-chaîne doit-elle être considérée comme une phrase? Par exemple, est-ce que "Hello world" s'effondrerait jusqu'à "Helo world"? –

+0

@Adam Oui, je prévois de mettre en œuvre un minimum. Je devine que 10 caractères consécutifs feraient. – natli

+1

Quelle est la distance maximale entre les phrases? Si quelqu'un a "Hello World [100 caractères] Hello World", est-ce que ça se condensera en "Hello World [100 caractères]"? –

Répondre

10

Vous pouvez essayer des expressions régulières - attention à l'efficacité sûre, cependant:

Regex re = new Regex(@"(?<m>(.+))(.*?)\k<m>", RegexOptions.Compiled); 
string str = "My_First_Post_My_First_Post.htm"; 

re.Replace(str, "$1$2"); // My_First_Post_.htm 

Il supprime la première, la plus longue séquence, répétée. Pour le rendre au moins 10 caractères, par exemple, modifier le premier groupe de:

(?<m>(.{10,})) 

Pour limiter la distance entre les caractères à 2, par exemple, changer le deuxième groupe de:

(.{,2}?) 

Pour 1 caractère , il suffit de mettre (.??).

+1

Pouvez-vous expliquer ce qu'il essaie de faire? –

+0

@ L.B: Il remplace la séquence répétée la plus longue par une seule occurrence de la séquence répétée. – Ryan

+0

Yat-il un moyen de modifier cela afin que la distance maximale entre les phrases serait d'un caractère? Donc, s'il y a, par exemple, "salut" entre les phrases identiques, cela n'enlèverait rien. Je ne suis pas sûr si c'est déjà le cas. Regex me fait mal à la tête. – natli

Questions connexes