2011-06-21 4 views
1
parsing "\(|.*?)|)" - Too many)'s. 

Je receving cette erreur lors de la rédaction de ce ...analyse syntaxique " (| *.?) |)" - Trop) 's

private static Regex resourceTextsREGEX = new Regex(@"\(|.*?)|)", RegexOptions.Singleline | RegexOptions.Compiled | RegexOptions.IgnoreCase); 

Je veux une expression régulière pour ces deux choses 1- {Texte} 2- | Texte | Je veux pouvoir obtenir ces allumettes et les remplacer par quelque chose ... quelqu'un peut-il m'aider s'il vous plait?

+5

Vous utilisez SO depuis sept mois et vous avez posé 15 questions précédentes. Avec respect, vous devriez formater les choses correctement maintenant. Voir la boîte pratique ** Comment formater ** à droite de la zone d'édition de la question, l'aperçu ci-dessous, et le lien ** [?] ** au-dessus. –

+1

Quelle est cette langue et que signifie "il y a 8 heures, 26 minutes de cela" dans votre message? –

Répondre

1

Selon votre exemple ce que vous voulez vous correspondre pourriez avoir à vouloir quelque chose comme ça

[{|](.*?)[|}] 

Voir ce here on Regexr

Vous voulez faire correspondre
1. {Texte}
2. | Texte |

Mon regex est correspondant au premier

[{|] soit un { ou un |

Vient ensuite un groupe de capture qui obtient votre texte à l'aide d'un match paresseux (.*?)

Et enfin le caractère de clôture est correspond à [|}] signifiant soit } ou |

+0

Ce modèle trouvera également "{Text |" et "| Texte" ". – smackcrane

2

vous échappez ( et non )

6

Vous avez pas dit que la saveur de regex est, mais les chances sont assez élevées que ( et ) sont des opérateurs de regroupement. Votre expression a désadaptées entre parenthèses:

 @"\(|.*?)|)"

Vous pourriez avoir signifié

 @"(|.*?\)|)" 
    ^ ^-- escape 
     +-- no escape

... si vous essayez de créer un groupe qui peut inclure une ) réelle, ou

 @"\(|.*?\)|\)" 
    ^ ^^ 
     +-----+--+--- escapes everywhere

... si vous n'essayez pas de créer un groupe, mais simplement d'essayer de faire correspondre les parens.

0

Essayez cette

static Regex resourceTextsREGEX = new Regex(@"({)([^}{\|]+)(})|(\|)([^}{\|]+)(\|)", RegexOptions.Singleline | RegexOptions.Compiled | RegexOptions.IgnoreCase); 

cela correspond {text}, |text| et pas avec {}, ||, {text|

0

Si je comprends bien correctement, vous demandez une regex pour faire correspondre "{du texte ici}" et "| du texte ici |".

(\{.*?\}|\|.*?\|) devrait faire l'affaire; il correspond à n'importe quoi (avec un quantificateur non-gourmand) à l'intérieur d'une paire d'accolades ou quoi que ce soit (encore un quantificateur non-gourmand) à l'intérieur d'une paire de barres verticales avec une paire de parenthèses de regroupement.

Bien sûr, si vous ne voulez pas faire correspondre "{}" ou "||" vous pouvez simplement remplacer chaque astérisque (*) par un plus (+).