C # Заменить часть строки - PullRequest
3 голосов
/ 08 марта 2012

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

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

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

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

width='

Ответы [ 8 ]

35 голосов
/ 08 марта 2012

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

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

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

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

4 голосов
/ 08 марта 2012

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

С манжеты Regex.Замена может помочь:

var newString = Regex.Replace(@".*width='\d'",string.Foramt("width='{0}'",newValue));
2 голосов
/ 08 марта 2012

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

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

, где \b s указывают, что вы хотите соответствовать целому слову, \s* допускает ноль или любое количество пробельных символов, а \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...

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

2 голосов
/ 08 марта 2012
using System.Text.RegularExpressions;
Regex reg = new Regex(@"width='\d*'");
string newString = reg.Replace(oldString,"width='325'");

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

0 голосов
/ 08 марта 2012

Я бы использовал 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}");
0 голосов
/ 08 марта 2012

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

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 голосов
/ 08 марта 2012

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

Пример:

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

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

0 голосов
/ 08 марта 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...