2010-02-05 4 views
1

J'ai une chaîne d'entrée comme ceci:C# 's regex ne fonctionne pas comme je le veux aussi

\ pard \ nowidctlpar \ QJ \ b0 \ SCAPS Le présent Accord \ scaps0 est fait et est entré dans cette date, \ {# DATEAGREEMENT # \}, par et entre [removed] (\ ldblquote [supprimé] \ rdblquote), et ses successeurs et/ou ayants droit, avec adresse à [removed], et \ {# TXTPLAINTIFF # \}, (\ ldblquote Demandeur \ rdbloquée), Individuellement, de ___________________, et, \ {# TXTPLAINTI FFATTORNEY # \}, (\ ldblquote demandeur \ rquote s Procureur \ rdblquote) de \ {# TXTATTORNEYFIRM # \}. \ Par

et je veux faire une analyse syntaxique avec regex.

Ce code J'utilise:

temp = Regex.Replace(temp, @"\\{#.*#\\}", "_____"); 

Le seul problème est qu'il correspond à la plus large ensemble, ce qu'il faut à l'ensemble du paragraphe parce que le paragraphe se termine par « # \} », comment peut Je dois correspondre à chaque groupe? I.E., ce paragraphe devrait correspondre à 4 fois au lieu d'une fois.

Répondre

4

Avez-vous essayé ce qui en fait un match non gourmand?

temp = Regex.Replace(temp, @"\\{#.*?#\\}", "_____"); 
1
temp = Regex.Replace(temp, @"\\{#.*?#\\}", "_____"); 

Ajout d'un '?' au '*' effectuera une recherche non-gourmande. Votre regex initiale effectuait une recherche gourmande, donc il chercherait la correspondance la plus large possible.

1

Si je me souviens, l'ajout d'un? les changements d'un opérateur de avide de non-gourmand, alors essayez ceci:

temp = Regex.Replace(temp, @"\\{#.*?#\\}", "_____"); 
1

Vous êtes à la recherche d'une évaluation paresseuse:

temp = Regex.Replace(temp, @"\\{#.*?#\\}", "_____"); 

peut le faire

Questions connexes