2009-07-21 7 views
2

Je suis très inexpérimenté quand il s'agit d'expressions régulières. Ce que j'essaie de faire, c'est de parcourir une liste de chaînes et d'essayer de trouver des chaînes d'un certain modèle. Les chaînes qui m'intéressent seront sous la forme "some text ***{some text}***" Comment écrire un RegEx pour correspondre? J'essayais ceci:.NET RegEx aide

Regex expression = new Regex("***"); 

mais cela me donne une erreur. parsing "***" - Quantifier {x,y} following nothing.

Est-ce que quelqu'un peut me diriger dans la bonne direction? J'essaie de faire défiler les options de la liste de sélection et d'ajouter une classe CSS aux options pertinentes.

Regex expression = new Regex("***"); 
foreach (ListItem li in listItemCollection) 
{ 
    if (expression.IsMatch(li.Value)) 
     li.Attributes.Add("class", "highlight1"); 
} 

mais cela ne fonctionne évidemment pas.

Toute aide est appréciée, ~ ck à San Diego

Répondre

9

Vous devez échapper à l'astérisque, comme il est un métacaractère valable dans RegExp.

Regex expression = new Regex(@"\*\*\*"); 
+0

corrigé l'erreur de compilation ... –

+0

merci, j'avais oublié à ce sujet :) – inkedmn

+2

Regex.Escape est également utile: nouvelle Regex (Regex.Escape ("***")); –

3

* a une signification particulière dans l'expression régulière.

Si vous cherchez à correspondre 3 asteriks, essayez

Regex expression = new Regex(@"\*\*\*"); 

EDIT:

Si vous essayez seulement de vérifier si une chaîne contient "***", regardez bdukes' answer.

+0

a corrigé l'erreur de compilation ... –

2

Essayez quelque chose comme ceci:

\*\*\*[^\*]+\*\*\* 
3

Si tout ce que vous essayez de faire est de faire correspondre trois astérisques, pourquoi ne pas simplement utiliser la méthode string.Contains au lieu d'une expression régulière?

foreach (ListItem li in listItemCollection) 
{ 
    if (li.Value.Contains("***")) 
     li.Attributes.Add("class", "highlight1"); 
} 
+0

+1 pour avoir pensé au problème réel au lieu de simplement corriger le code. C'est une meilleure idée au lieu d'utiliser Regex. – SolutionYogi

0

Vous devriez essayer ce modèle regex

\*{3}\{[^\}]*}\*{3} 

Ceci trouvera ***{some text}***

Si vous voulez que le texte avant que le * vous devez utiliser celui-ci

^[\w\s]*\*{3}\{[^\}]*\}\*{3} 
  • ^ - être égrenage de l'entrée
  • [\w\s]* tout caractère dans az, AZ, 0-9, _ et de l'espace blanc, 0 fois ou plus
  • \*{3} trois astérisques
  • \{
  • match: {
  • [^\}]* quelconque à l'exception de carbonisation } 0 ou plusieurs fois
  • \} match de }
  • \*{3} Assemblez trois astérisques
+0

@ Cédric, remarquez la correction re: '\ w' - elle correspond aussi aux chiffres. En outre, dans certaines versions de regex, '\ w 'correspond aux lettres et aux chiffres de tous les systèmes d'écriture, et pas seulement aux caractères ASCII. –