2014-11-11 3 views
1

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

TextBlock Text="this is a test" 

Тогда я хочу, чтобы изменить его на:

TextBlock Text="Any given string comes here" 

Для этого, после некоторого поиска я попробовал этот метод:

Regex.Replace(inputString, @"(?<=TextBlock Text=\")(\w+?)(?=\")", "Any given string comes here"); 

Но я «У меня много ошибок, говоря:« Ссылка на объект требуется для нестатического поля, метода или свойства ». Есть ли эффективный способ сделать это с помощью Regex? Благодарю.

+1

При предварить строку с "в" знак (@) вам нужно, чтобы избежать двойных кавычек, как "", а не \». –

+1

[Regex. Заменить] (http://msdn.microsoft.com/en-us/library/e7f5w83z.aspx) является статическим методом, он использует его в порядке. Хотя он не использует возвращаемое значение в своем примере. – Jonesopolis

ответ

1

Вместо (\w+?) в своем регулярном выражении нужно использовать:

([\w ]+) 

Для поиска слов, разделенных пробелом.

Или лучше вы можете использовать отрицанием:

([^"]+) 

Это означает совпадение 1 или более символов ничего, кроме двойной кавычки.

Ваш код будет:

Regex.Replace(inputString, 
     @"(?<=TextBlock Text="")([^""]+)(?="")", "Any given string comes here"); 
+0

Я также попробовал метод, но с некоторыми изменениями, как dasblinkenlight и Эд Гиббс упоминается.Мне нужно избегать двойных кавычек с помощью «, то ваш код работает нормально.Спасибо. –

+0

Ah ok Я исправил выход, но я верю, что часть регулярного выражения была верна в моем ответе. – anubhava

1

Похоже, проблема в том, что вы пытаетесь избежать двойные кавычки внутри ваших стенографических строк. Это не так, как это делается: Вы должны удвоить свои двойные кавычки внутри таких строк, как это:

@"(?<=TextBlock Text="")(\w+?)(?="")" 

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

Примечание: с этой ошибкой в ​​пути рассмотрите вопрос об устранении проблемы catastrophic backtracking в вашем шаблоне регулярного выражения.

1

У вас есть три проблемы, из-за которых это не работает должным образом.

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

String result = Regex.Replace(inputString, @"(?<=TextBlock Text="")[\w\s]+(?="")", "Any given string comes here"); 

Ideone Demo

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