用百分号将单引号内的字符串括起来
Bracket a string that's inside single quotes with percentage sign
直到 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%'
请特别注意。最后一个例子。我想要 lazy 匹配和 not greedy 匹配。最后一种情况下的贪婪匹配会将原始字符串替换为值 foo
'%..%'`
我正在使用 C#。第一个离我最近的是:
Regex.Replace(s, "[Hh][Ee][Ll]{2}[Oo] '.*'", "[Hh][Ee][Ll]{2}[Oo] '%.*%'");
但这显然是不正确的。我不知道如何取回单引号中的内容。
更新:
谢谢大家的答案。他们都非常乐于助人。我记得现在正在看你的答案。我缺少的是一个 字符实体引用 或者它被称为你可以引用所有以前的模式匹配的东西。
搜索 '([^']+)'
并替换为 '%%'
您可以像这样使用简单的正则表达式:
(')([^']+)
并使用替换字符串:
%%
您可以使用以下正则表达式进行替换。
String r = Regex.Replace(s, @"'([^']*)'", "'%%'");
以下正则表达式如何:
var res = Regex.Replace(s, @"'(.*?)'", "'%%'");
由于单引号内的字符以单词字符开头和结尾,您可以使用以下基于环视的正则表达式。
String r = Regex.Replace(s, @"(?<=')\b|\b(?=')", "%");
直到 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%'
请特别注意。最后一个例子。我想要 lazy 匹配和 not greedy 匹配。最后一种情况下的贪婪匹配会将原始字符串替换为值 foo
'%..%'`
我正在使用 C#。第一个离我最近的是:
Regex.Replace(s, "[Hh][Ee][Ll]{2}[Oo] '.*'", "[Hh][Ee][Ll]{2}[Oo] '%.*%'");
但这显然是不正确的。我不知道如何取回单引号中的内容。
更新: 谢谢大家的答案。他们都非常乐于助人。我记得现在正在看你的答案。我缺少的是一个 字符实体引用 或者它被称为你可以引用所有以前的模式匹配的东西。
搜索 '([^']+)'
并替换为 '%%'
您可以像这样使用简单的正则表达式:
(')([^']+)
并使用替换字符串:
%%
您可以使用以下正则表达式进行替换。
String r = Regex.Replace(s, @"'([^']*)'", "'%%'");
以下正则表达式如何:
var res = Regex.Replace(s, @"'(.*?)'", "'%%'");
由于单引号内的字符以单词字符开头和结尾,您可以使用以下基于环视的正则表达式。
String r = Regex.Replace(s, @"(?<=')\b|\b(?=')", "%");