/ / C # Regex et un remplacement en bloc - c #, regex, chaîne

Regex C # et un remplacement en masse - C #, regex, chaîne

Il existe plusieurs occurrences de la balise ab: tag_x dans une chaîne.

Format de balise:

<ab:tag_x contents="some text" src_id="some id">

Comment puis-je remplacer chaque balise par la valeur de l'un de ses attributs - "contenu"?

Exemples:

<ab:tag_x contents="some text1" src_id="some id"> -> some text1
<ab:tag_x contents="some text2" src_id="some id"> -> some text2

Merci, LG

Réponses:

1 pour la réponse № 1

Peut-être besoin de polissage, mais voici ce que j’ai eu.

class Program
{
static void Main()
{
string data = "<data><ab:tag_x contents="some text1" src_id="some id"><br/><ab:tag_x contents="some text2" src_id="some id"></data>";
string pattern = "<ab:tag_x.*?contents="(.*?)".*?>";
string replacement = "$1";
string result = Regex.Replace(data, pattern, replacement);

Console.WriteLine(result);
}
}

Pour comprendre le fonctionnement du motif ou le modifier, lisez ce MSDN sur Langage d'expression régulière.

Pour comprendre le fonctionnement de la chaîne de remplacement et la modifier, lisez ce MSDN sur Substitutions d'expressions régulières.

HTH


0 pour la réponse № 2

Je recommande ce qui suit:

string result = Regex.Replace(myhtml,
"<ab:tagx[^>]+contents="([^"]*)"[^>]*>",
"$1");

Cela va gérer:

  • N'importe quel nombre d'attributs avant la contents attribut
  • N'importe quel nombre d'attributs après la contents attribut
  • Balises de début ou balises à fermeture automatique
  • Contenu vierge (contents="")
  • Caractères LF à l’intérieur de la balise (c’est pourquoi je n’ai pas utilisé .*?).

Hypothèses:

  • Les valeurs d'attribut sont délimitées par des guillemets.
  • Il n'y a pas de caractères d'espacement autour du signe égal.
  • Tags et le contents attribut sont toujours en minuscule.
  • Chaque balise contient le contents attribut, même si la valeur est vide.