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