我们正在从某人制作的错误导出中导入一些文本,其中充满了问号字符,而双引号曾经是双引号。
我可以用正则表达式替换?吗"?例子:
?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
它抓住了“?”之间的字符。