/ / C # Regex и насипно заместване - c #, regex, string

C # Regex и насипно заместване - c #, regex, string

Има няколко случая на ab: tag_x маркер в низ.

Формат на етикетите:

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

Как да заменя всеки етикет със стойността на един от неговите атрибути - "съдържание"?

Примери:

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

Благодаря, LG

Отговори:

1 за отговор № 1

Може да се нуждаете от полиране, но ето какво имам.

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

За да разберете как работи моделът или го модифицирате, прочетете този MSDN Език на нормалния израз.

За да разберете как работи низът за подмяна или го променяте, прочетете този MSDN Редовни замествания на изрази.

HTH


0 за отговор № 2

Препоръчвам следното:

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

Това ще се справи:

  • Всеки брой атрибути преди contents атрибут
  • Всеки брой атрибути след contents атрибут
  • Начални маркери или самозатварящи се маркери
  • Празно съдържание (contents="")
  • LF символи вътре в етикета (затова не използвах .*?).

Предположения:

  • Стойностите на атрибутите се ограничават с символи с двойно цитиране.
  • Няма знак за празно място около знака за равенство.
  • Етикети и contents атрибут винаги са малки.
  • Всеки маркер съдържа contents атрибут, дори ако стойността е празна.