2015-01-13 2 views
0

До 4 лет назад я знал регулярные выражения в моей руке, но я их не трогал, так что мне нужна помощь.Кронштейн, который находится внутри одинарных кавычек с знаком процента

Как создать регулярное выражение для замены всех вхождений 'whatever' как '%whatever%', включая одинарные кавычки?

Я хотел бы следующие строки, чтобы преобразовать, как указано ниже:

Original     Convert To 
hello 'world'    hello '%world%' 
'foo' bar     '%foo%' bar 
'foo bar'     '%foo bar%' 
foo 'bar' but gar 'har'  foo '%bar%' but gar '%har%' 

Обратите внимание особ. последний пример. Хочу ленивый совпадений и не жадный. Жадный матч в последнем случае заменит исходную строку значением foo '% ..%' `

Я использую C#. Ближайший я пришел первый из них является:

Regex.Replace(s, "[Hh][Ee][Ll]{2}[Oo] '.*'", "[Hh][Ee][Ll]{2}[Oo] '%.*%'");

Но это, очевидно, неправильно. Я не знаю, как вернуть все, что было в одиночных кавычках.

ОБНОВЛЕНИЕ: Благодарим всех вас за ответы. Они все очень полезны. Я помню, что теперь смотрю на ваши ответы. Вещь, которую я отсутствовала, была ссылкой на символ лица или что-то, что она называлась там, где вы могли ссылаться на все предыдущие совпадения.

ответ

2

Вы можете использовать следующее регулярное выражение для замены.

String r = Regex.Replace(s, @"'([^']*)'", "'%$1%'"); 

Ideone Demo

0

Вы можете использовать простые регулярные выражения, как это:

(')([^']+)\1 

И использовать заменить строку:

\1%\2%\1 
+2

Почему все отлов и обратная ссылка? Это совершенно не нужно. – nhahtdh

+0

@nhahtdh Да, вы правы ... но я отправил ответ для этого с помощью другого подхода с регулярным выражением. Я знаю, что мы можем это сделать, как указал JE SUIS CHARLIE, но мой - другой подход. –

1

насчет следующего регулярного выражения:

var res = Regex.Replace(s, @"'(.*?)'", "'%$1%'"); 
0

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

String r = Regex.Replace(s, @"(?<=')\b|\b(?=')", "%"); 

DEMO