将带有百分号的单引号内的字符串括起来

时间:2015-01-13 12:09:48

标签: c# .net regex

直到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%'

请注意esp。最后一个例子。我想要 lazy 匹配和不贪心的匹配。在最后一种情况下,贪婪的匹配将使用值foo'%..%'`

替换原始字符串

我正在使用C#。我最接近的第一个是:

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

但这显然不正确。我不知道如何找回单引号中的内容。

更新 谢谢大家的答案。他们都非常有帮助。我记得现在看着你的答案。我缺少的是一个字符实体引用或者它可以引用你之前所有模式匹配的东西。

5 个答案:

答案 0 :(得分:3)

搜索'([^']+)'并替换为'%$1%'

答案 1 :(得分:2)

您可以使用以下正则表达式替换。

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

Ideone Demo

答案 2 :(得分:1)

以下正则表达式如何:

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

答案 3 :(得分:0)

您可以使用这样的简单正则表达式:

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

并使用替换字符串:

\1%\2%\1

答案 4 :(得分:0)

由于单引号内的字符以字符开头和结尾,因此您可以使用以下基于外观的正则表达式。

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

DEMO