Има няколко случая на 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
атрибут, дори ако стойността е празна.