2012-02-18 2 views
1

В строке есть несколько тегов ab: tag_x.C# Regex и массовая замена

формат Тэг:

<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

+0

Если это XML, запрошенная вами замена не такова: вы не заменяете соответствующий тег закрытия. Если это не XML, объясните, каким образом он отличается. Например, какие-либо символы имеют особое значение, которое вы должны учитывать? – hvd

+0

@hvd Существует большой фрагмент текста non-xml/non-html, который содержит несколько тегов . Они должны быть заменены атрибутами «содержимого» тега. –

ответ

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 на Regular Expression Language.

Чтобы понять, как сменная строка работает или модифицирует ее, прочитайте этот MSDN по адресу Regular Expressions Substitutions.

НТН

+0

Привет, Якодер, большое спасибо. –

0

я рекомендую следующее:

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

Это будет обрабатывать:

  • Любое количество атрибутов перед атрибутом contents
  • Любое количество атрибутов после атрибута contents
  • Start теги или самозакрывающиеся теги
  • Blank содержание (contents="")
  • LF символов внутри тега (именно поэтому я не использовал .*?).

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

  • Значения атрибутов разграничиваются с двойной кавычки.
  • На знаке равенства нет пробельных символов.
  • Теги и атрибут contents всегда строчные.
  • Каждый тег содержит атрибут contents, даже если значение пустое.