2015-12-15 5 views
2

Я крутил колеса, пытаясь понять это. Мне нужно заменить двойные кавычки внутри набора скобок. Мой пример ниже показывает одиночные кавычки, но я до сих пор возникают проблемыVB.Net Regex заменить двойную цитату внутри скобок

Это работает для меня -

Dim input As String = "This is my ['Test'] that works" 
Dim output As String = Regex.Replace(input, "(?<=my.*)'(?=.*that)", "?") 

создавшего эту строку - This is my [?Test?] that works.

Но если я пытаюсь это присоединяет вместо того, чтобы заменить одиночные кавычки -

Dim input As String = "This is my ['Test'] that works" 
Dim output As String = Regex.Replace(input, "(?<=[.*)'(?=.*])", "?") 

Производит это, который не то, что я хочу - This is my ['?Test'?] that works.

Как вы видите, Regex.replace добавляет? после одной кавычки, но мне нужно, чтобы заменить одну цитату на. Я в тупике.

+0

"Я поставлен в тупик" - * Так я *. –

+0

Escape '['. '(? <= \ [. *) '(? =. *])' '. *' слишком жадный и может переборщить с большим текстовым вводом. –

ответ

1

Чтобы соответствовать все одиночные кавычки внутри квадратных скобок, вам нужно, чтобы избежать открытия [ или он будет рассматриваться как специальный символ (открытие класса символов):

(?<=\[[^][]*)'(?=[^][]*]) 

Кроме того, необходимо ограничить символы должны отличаться от [ и ]. Для этого вы можете использовать отрицательный класс символов [^][] (это будет соответствовать любому символу, отличному от [ и ]).

См regex demo

enter image description here

+0

Итак, я добавил escape-символ, как предложил stribizhev, и это исправило мою проблему. Dim input As String = "Это мой ['Test'], который работает« Dim output As String = Regex.Replace (input, «(? <= \ [. *) '(? =. *])", " ?), но теперь я понял, что у меня большая проблема. Я мог бы иметь два набора скобок. Итак, моя строка - MyObject: "[" A "," B "]", "MyObject2": "[" C "]", поэтому мне нужно удалить только двойные кавычки внутри скобок. Таким образом, он будет выглядеть как MyObject: «[A, B]», «MyObject2»: [C] « – Dwight

+0

Посмотрите [здесь] (http://regexstorm.net/tester?p= (% 3f% 3c% 3d% 5c % 5b% 5b% 5e% 5d% 5b% 5d *)% 22 (% 3f% 3d% 5b% 5e% 5d% 5b% 5d *% 5d) & я = MyObject% 3a% 22% 5b% 22A% 22% 2c % 22B% 22% 5d% 22% 2c% 22MyObject2% 22% 3a% 22% 5b% 22C% 22% 5d% 22 & r =), удаляются только двойные кавычки в квадратных скобках. –

+1

Спасибо, stribizhev !!!!! Это трюк! – Dwight

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

  • Нет связанных вопросов^_^