2012-03-07 8 views
3

Как заменить часть строки с потенциально неизвестным начальным индексом. Например, если бы я имел следующие строки:C# Заменить часть строки

"<sometexthere width='200'>" 
"<sometexthere tile='test' width='345'>" 

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

Я понимаю, что мне как-то придется основывать это на следующей части, которая является постоянной, я просто не совсем понимаю, как этого добиться.

width=' 
+3

Это выглядит как работа для ... [Регулярные выражения] (http://www.regular-expressions.info/examples.html)! – jrummell

+3

+1 для поиска творческого способа обхода стандартных ответов для «как разобрать HTML с помощью RegEx» и «Я хочу проанализировать и построить XML с помощью строковых манипуляций». –

+11

@jrummell: Это выглядит как работа для синтаксического анализатора. Это не похоже на работу для регулярных выражений. Во-первых, регулярные выражения не учитывают грамматику разметки, а второе * любое регулярное выражение, размещенное здесь до сих пор, неверно *. –

ответ

2
using System.Text.RegularExpressions; 
Regex reg = new Regex(@"width='\d*'"); 
string newString = reg.Replace(oldString,"width='325'"); 

Это вернет новую строку с новой шириной, если вы поместите число между «'в поле новой ширины.

+0

Хорошее чистое решение Jetti, спасибо за это. +1 –

+0

@RyanSmith Рад, что я мог бы помочь! – Jetti

4

Посмотрите на Regex класса, вы можете выполнить поиск содержимого атрибута и Repalce значения с помощью этого класса.

Off манжеты Regex.Replace может сделать трюк:

var newString = Regex.Replace(@".*width='\d'",string.Foramt("width='{0}'",newValue)); 
+6

См. Http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags – Khan

0

Вы можете использовать регулярные выражения (RegEx), чтобы найти и заменить весь текст в одинарных кавычках, после того, как «ширина =».

0

Вы можете использовать регулярное выражение, как (?<=width=')(\d+)

Пример:

var replaced = Regex.Replace("<sometexthere width='200'>", "(?<=width=')(\\d+)", "123");" 

replaced сейчас: <sometexthere width='123'>

0

Используйте регулярные выражения для достижения этой цели:

using System.Text.RegularExpressions; 

... 

string yourString = "<sometexthere width='200'>"; 

// updates width value to 300 
yourString = Regex.Replace(yourString , "width='[^']+'", width='300'); 

// replaces width value with height value of 450 
yourString = Regex.Replace(yourString , "width='[^']+'", height='450'); 
+0

Предполагая, что атрибут width всегда является числовым значением. Не обязательно действительное предположение. –

0

Я бы использовал Regex.
Что-то вроде этого, чтобы заменить значение ширины на 123456.

string aString = "<sometexthere tile='test' width='345'>"; 
Regex regex = new Regex("(?<part1>.*width=')(?<part2>\\d+)(?<part3>'.*)"); 
var replacedString = regex.Replace(aString, "${part1}123456${part3}"); 
2

Используйте регулярное выражение

Regex regex = new Regex(@"\b(width)\b\s*=\s*'d+'"); 

где \b s указать, что вы хотите, чтобы соответствовать целому слову, \s* позволяет нуль или любого количеству пробельных Charaters и \d+ позволяет одному или несколько числовых заполнитель. Чтобы заменить числовое значение, вы можете использовать:

int nRepValue = 400; 
string strYourXML = "<sometexthere width='200'>"; 

// Does the string contain the width? 
string strNewString = String.Empty; 
Match match = regex.Match(strYourXML); 
if (match.Success) 
    strNewString = 
     regex.Replace(strYourXML, String.Format("match='{0}'", nRepValue.ToString())); 
else 
    // Do something else... 

Надеюсь, это поможет.

+0

Почему * один * пробельный символ? ** XML допускает неограниченные пробелы **. –

+0

Изменен - ​​я не уверен, почему я это сделал:]. Благодарю. – MoonKnight

35

До сих пор у вас есть семь ответов, говорящих вам делать не то. Не используйте регулярные выражения для выполнения анализатора. Я предполагаю, что ваша строка - это кусок разметки. Предположим, что это HTML.Что делает ваше регулярное выражение делать с:

<html> 
<script> 
    var width='100'; 
</script> 
<blah width = 
       '200'> 
... and so on ... 

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

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

+0

+1. ЭТО. (больше символов) – Rob

+0

Я рад, что кто-то упомянул об этом. Я подумал точно так же, когда прочитал другие ответы. –

Смежные вопросы