2013-05-02 3 views
3

Как мы можем заменить ' на \\' в строке. (Это может быть сделано с помощью Regex.IsMatch(), Regex.Matches(), Regex.Replace() Однако, это должно быть сделано только тогда, когда ' не \ или \\ перед уже. (Это где я застрял)Заменить шаблон в строке только в том случае, если выполнено определенное условие - Regex

Это означает, что найти все ', которые не имеют \ или \\ перед ним, а затем добавить то же самое, то есть ' заменить \\'

Пример строки: 'abcd\'efg'hijkl'mno\\'pqrs'

результирующая строка: \\'abcd\\'efg\\'hijkl\\'mno\\'pqrs\\'

+0

извините за сумбур, просто обновил вопрос более подробно о том, что именно я хочу сделать. Благодарю. – Indigo

ответ

9

Нет необходимости в регулярном выражении, даже.

var newStr = oldStr.Replace("\\'", "'").Replace("'", "\\'"); 

С регулярным выражением, вы можете найти все ', которые не имеют \\ перед ними:

[^\\]' 
+0

Часть регулярного выражения неверна. –

+0

Твой умнее, я просто стал основным. Он может группировать '[]' и использовать его в заменяющей строке, чтобы он не потерял эту информацию. Так что это не совсем неправильно. – SimpleVar

+0

Ну, во-первых, вы должны иметь в виду '[^ \\\\] '', чтобы избежать обратных косых черт. И, во-вторых, это только догоняет одну обратную косую черту раньше, поэтому она неправильно ломает '\ '', что может иметь другое значение в его предмете, что приводит к '\\\''. И в-третьих, хотя и незначительный, он не поймал бы цитату в начале темы (в то время как lookbehind бы). –

5

Я думаю, что выигрывает @YoryeNathan. Но просто, чтобы научить урок регулярных выражений, это именно то, что отрицательные утверждения lookbehind существуют для. Заменить

(?<!\\\\)' 

с

\\' 

Использование

string output = Regex.Replace(input, "(?<!\\\\)'", "\\'"); 
+0

Спасибо за урок, я думал что-то вроде '([^ \\\\] ')', но это не работает для одиночной кавычки в начале ввода. –

+0

Вы можете использовать '($ | [^ \\\\] ')' для начала: P – SimpleVar

+0

@WouterHuysentruit - Правильно. Для этого без отрицательного lookbehind (например, в Javascript) потребуется более сложное выражение: '(^ | ^. |. [^ \\] | [^ \\].) ''.Другими словами, четыре случая: (1) '' 'как первый символ строки, (2)' '' как второй символ строки (так как он не может быть \\\), (3) '' 'следующий любой символ и не \ (так как это исключает \\\), (4) '' ', следуя не-\ и любому символу (так как это также исключает \\\). –

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