我们正在从某人制作的错误导出中导入一些文本,其中充满了问号字符,而双引号曾经是双引号。
我可以用正则表达式替换?
吗"
?例子:
?foo? => "foo"
?foo bar? => "foo bar"
foo? => foo?
您可以使用正则表达式\?(.*)\?
来匹配?
标记之间的内容。
但是如果你这样做,在示例中a ?b? ?c? d
它会导致a "b? ?c" d
因为它匹配最长的 substring ?b? ?c?
。
要解决这个问题,您需要对正则表达式使用惰性匹配\?(.*?)\?
,这将导致a "b" "c" d
.
如果不能像中那样有两个问号a ?? b
,那么应该是\?(.+?)\?
。所以:
Regex.Replace(text, @"\?(.+?)\?", "\"$1\"");
意思是“在第一组中被识别的$1
任何东西”,即被识别的任何东西.+?
。
编辑:更快的选择是:
Regex.Replace(text, @"\?([^\?]+)\?", "\"$1\"");
[^\?]
意思是“除了\?
”。
你的正则表达式应该是/^\?([^?]+)\?$/
:http ://refiddle.com/gmw
尝试
s/\?(.*)\?/$1
它抓住了“?”之间的字符。