2009-11-04 6 views
0

Je suis très faible avec Regex et j'ai besoin d'aide. Entrée ressemble à ce qui suit:Regex Help Simple Pattern

<span> 10/28 &nbsp;&nbsp;Currency:&nbsp;USD

sortie souhaitée est 10/28.

Je dois obtenir tout le texte entre <span> et "Devise:" qui sont des nombres, un caractère "/" ou un caractère ":". Sans espaces.

Pouvez-vous m'aider? Merci.

+1

Pouvez-vous donner un exemple d'entrée et de sortie que vous voulez? –

+0

Exemple d'entrée: 12/02 Devise: Résultats souhaités: 12/02 – Bob

Répondre

3

Mise à jour: Ce que vous décrivez est en trois parties.

Ce que nous faisons est besoin d'un ou plusieurs caractères qui sont les chiffres, barre oblique et :: [0-9/:]* (l'astérisque signifie « zéro ou plusieurs instances »). Entouré par:

  • <span>(optional stuff we don't want) est représenté comme: <span>[^0-9/:]*
  • (optional stuff we don't want)Currency est: [^0-9/:]*Currency

(Le ^ signifie "non") - alors ce sera essentiellement aucun résultat nombre de caractères qui ne sont pas la bits que nous voulons, y compris des choses comme &nbsp;

En C#:

string pattern = @"<span>[^0-9/:]*(?<value>[0-9/:]*)[^0-9/:]*Currency"; 
Match match = Regex.Match(input, pattern, RegexOptions.SingleLine | RegexOptions.IgnoreCase); 
string output = match.Groups["value"].Value; 
+0

Merci, mais cela n'a pas fonctionné. – Bob

+0

@Bob désolé, j'ai mal lu une partie de votre question. J'ai édité pour le réparer. –

+0

ne fonctionne toujours pas, voici un échantillon en fait du texte: 10/28 \t     Monnaie:   USD – Bob

1

Voici un bon point de départ. L'utilisation d'autres codes est très bien au début, mais si vous n'apprendrez pas ce genre de choses, vous allez être éternellement condamné à poser des questions chaque fois que vous avez besoin d'une nouvelle regex.

Mastering Regular Expressions

Regular Expressions Cookbook

Online tutorial

passer un peu de temps, apprendre les bases, et très bientôt vous serez nous aider avec nos problèmes de regex.

+0

Je suis dans une crise majeure, si j'avais le temps de l'apprendre maintenant, je ne poserais pas de questions. – Bob

+1

c'est cool, relisez cette réponse quand vous avez du temps libre: P –

+0

-1 Désolé, mais en disant "apprendre les expressions régulières" ne répond pas à sa question spécifique. – CAbbott

1

Essayez cette expression régulière: (. Regex non gourmand)

<span>(?>.*?([\d/:]+)).*?Currency 

Le .*? correspond au moins de tout ce qu'il devrait fonctionner pour votre exemple <span> 10/28 &nbsp;&nbsp;Currency:&nbsp;USD.

Ceci est a nice site pour tester des expressions régulières.

+0

Cette regex souffrira d'un retour arrière catastrophique lorsque '' n'est pas suivi de' Currency'. –

+0

@Jeremy Stein: Testé et New York City n'a pas été inondé. Que voulez-vous dire par catastrophique? – Andomar

+0

http://www.regular-expressions.info/catastrophic.html Dans ce cas, je suppose que c'est seulement un problème s'il y a beaucoup de chiffres dans le sujet. Essayez-le sur la source de cette page, ou sur ' 5555 ...' où il y a environ 100 5s. De toute façon, il y a une solution facile, que je vais faire pour vous maintenant. –