/ / C # регулярний вираз та групова заміна - c #, регулярний вираз, рядок

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 атрибут, навіть якщо значення порожнє.