/ / C # Regex a hromadné nahradenie - c #, regex, string

C # Regex a hromadné nahradenie - c #, regex, string

Existuje niekoľko výskytov tagu ab: tag_x v reťazci.

Formát značky:

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

Ako môžem nahradiť každú značku hodnotou jedného z jej atribútov - „obsah“?

Príklady:

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

Vďaka, LG

odpovede:

1 pre odpoveď č. 1

Možno bude potrebovať nejaké leštenie, ale tu je to, čo mám.

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);
}
}

Ak chcete pochopiť, ako vzor funguje alebo ho upraviť, prečítajte si túto dokumentáciu MSDN Jazyk regulárnych výrazov.

Ak chcete pochopiť, ako funguje náhradný reťazec alebo ho upraviť, prečítajte si túto dokumentáciu MSDN Substitúcie regulárnych výrazov.

HTH


0 pre odpoveď č. 2

Odporúčam nasledovné:

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

Toto bude spracovávať:

  • Akýkoľvek počet atribútov pred contents atribút
  • Akýkoľvek počet atribútov po contents atribút
  • Spustite značky alebo samouzatváracie značky
  • Prázdny obsah (contents="")
  • LF znaky vnútri tagu (čo je dôvod, prečo som nepoužil .*?).

predpoklady:

  • Hodnoty atribútov sú oddelené znakmi s dvojitou citáciou.
  • Neexistujú žiadne znaky medzier okolo znaku rovnosti.
  • Značky a contents atribúty sú vždy malé.
  • Každá značka obsahuje contents atribút, aj keď je hodnota prázdna.