2017-01-05 3 views
0

Я искал короткое шифрование и короткую историю, мне нужно удалить тег xml из строки.Замена строк с меняющимися данными

Для каждой строки требуется глобальное правило для замены строки, и я смотрел на это регулярное выражение, но это не имеет смысла.

Вот некоторые примеры

<BitStrength>384</BitStrength> 

<BitStrength>1024</BitStrength> 

<BitStrength>12300</BitStrength> 

Мне нужно заменить всю строку и номер внутри, а, ни с чем. Я пытался что-то вроде:

string.replace("<BitStrength>12300</BitStrength>",""); 

Но вопрос длина и символы из числа, и матч никогда не встречается. У кого-нибудь есть решение? Может быть, регулярное выражение - это путь?

PS. Предпочтительно раствор в C#.

EDIT: Я ищу решение, которое заменяет всю строку не только этим примером, но и строками в целом.

<BitStrength>4633</BitStrength> 
<BitStrength>336</BitStrength> 
!!SomeConstantData!!5437!!EndConstant!! 
I would like 2 eggs today. 
I would like 17 eggs today. 
I would like 258367 eggs today. 

Теперь, если я поставлю string.replace("I would like ","").replace(" eggs today.") я бы остался с номером 258367, потому что я не покрывал это в своем заявлении. Я ищу решение для удаления этих данных. Это может быть любая ценность.

В моем конкретном примере я ищу, чтобы заменить <BitStrength>384</BitStrength> в <BitStrength>384</BitStrength><RSAKeyValue><Modulus>code</Modulus><Exponent>code</Exponent></RSAKeyValue> Этот вопрос я сталкиваюсь, что число между тегами bitstrength может быть что-нибудь между 386 и 16384, и мне нужно, чтобы удалить всю строку bitstrength.

+8

Вы должны использовать XML-анализатор. – SLaks

+0

Я мог бы, но это похоже на попытку расстрелять кролика с машиной смерти. Мне нужно простое решение, что-то вроде регулярного выражения, и кто-то должен понять все это. Я мог бы использовать XML-парсер, но, как я уже сказал, кролик, машина смерти. – CausticLasagne

+0

'XElement' чрезвычайно прост. – SLaks

ответ

1
string input = "<BitStrength>384</BitStrength>"; 
string pattern = @"<BitStrength>\d*</BitStrength>"; 
string replacement = " "; 
Regex rgx = new Regex(pattern); 
string result = rgx.Replace(input, replacement); 

Console.WriteLine("Original String: {0}", input); 
Console.WriteLine("Replacement String: {0}", result); 

возвращает

Original String: <BitStrength>384</BitStrength> 
Replacement String: 
+0

Mate. Ты гениальный. Это сработало. Ницца. – CausticLasagne

+0

Админы, вы можете закрыть этот вопрос, никакого дополнительного контента. – CausticLasagne

1

Вы не показываете, что вы пробовали, и мне интересно, является ли сбой результатом, потому что вы не делаете строку шаблона в качестве литерала с помощью @ перед этим?

Этот пример работает:

Regex.Replace(@"Blah<BitStrength>12300</BitStrength>Blah", 
       @"(\<BitStrength\>12300\</BitStrength\>)", 
       string.Empty) 

и возвращает

BlahBlah

Если фактическое количество не имеет значения, использовать этот шаблон:

(\<BitStrength\>\d+\</BitStrength\>) 
+0

Хм. Ладно, спасибо, я попробую. – CausticLasagne

+0

Я пробовал этот код, и он не работал. Число символов и длина не имеет значения, вся строка должна идти, но цифры продолжают меняться. – CausticLasagne

1

Это работает:

var source = string.Join(Environment.NewLine, 
          "<BitStrength>384</BitStrength>", 
          "<BitStrength>1024</BitStrength>", 
          "<BitStrength>12300</BitStrength>"); 

var result = source.Replace("<BitStrength>12300</BitStrength>", string.Empty); 
Смежные вопросы