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

本文关键字:百分 起来 单引号 字符串 | 更新日期: 2023-09-27 18:37:24

直到 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] '%.*%'");

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

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

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

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

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

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

Ideone 演示

那么下面的正则表达式呢:

var res = Regex.Replace(s, @"'(.*?)'", "'%$1%'");
您可以使用像

这样的简单正则表达式:

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

并使用替换字符串:

'1%'2%'1

由于单引号中的字符以单词字符开头和结尾,因此您可以使用下面基于环顾四周的正则表达式。

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

演示