2011-12-14 4 views
0

J'essaie d'extraire une valeur d'une chaîne en utilisant regex. La chaîne ressemble à ceci:extrait une valeur d'une chaîne en utilisant regex

<faultcode>&lt;![CDATA[900015The new password is not long enough. PasswordMinimumLength is 6.]]&gt;</faultcode> 

J'essaye de ne montrer que le message d'erreur à l'utilisateur final.

+0

Et quelle est la valeur que vous recherchez? –

+0

Quelle valeur essayez-vous d'extraire? –

+2

Y a-t-il une chance que vous analysiez XML au lieu d'utiliser un outil? –

Répondre

2

Puisque vous voulez probablement tout <![CDATA[ et ]]> cela devrait adapter:

<!\[CDATA\[(.+?)\]\]> 
2

La seule chose sensée est de le charger dans un XElement (ou XDocument, XmlDocument) et extraire la valeur de l'élément CDATA.

XElement e = XElement.Parse(xmlSnippet); 
string rawMsg = (e.FirstNode as XCData).Value; 
string msg = rawMsg.Substring("900015".Length); 
+0

En supposant que '<' est réellement '<' dans les données. –

0

Mise à jour pour correspondre à la modification de la question:

var xml = XElement.Parse(yourString); 
var allText = xml.Value; 
var stripLeadingNumbers = Regex.Match(xml.Value, @"^\d*(.*)").Groups[1].Value; 
0

D'abord, et avant tout, en utilisant regex to parse XML/HTML is bad. Maintenant, par message d'erreur je suppose que vous voulez dire le texte, sans compter les nombres. Une expression comme celle-ci ferait probablement l'affaire:

\<([^>]+)\>&lt;!\[CDATA\[\d*(.*)\]\]&gt;\</\1\> 

Le message d'erreur sera dans le deuxième groupe. Cela fonctionnera avec l'échantillon que vous avez donné, mais j'utiliserais plutôt XDocument ou XmlDocument pour l'analyser. Si vous utilisez C#, il n'y a vraiment pas de bonne raison de ne pas utiliser l'une ou l'autre de ces classes.

Questions connexes