我们正在从某人制作的错误导出中导入一些文本,并且它中充满了双引号的问号字符。
是否有正则表达式替换我可以用?
替换"
?例子:
?foo? => "foo"
?foo bar? => "foo bar"
foo? => foo?
答案 0 :(得分:2)
您可以使用正则表达式\?(.*)\?
来匹配?
标记之间的内容。
但如果您这样做,在示例a ?b? ?c? d
中,它会产生a "b? ?c" d
,因为它匹配最长的子字符串?b? ?c?
。
要解决此问题,您需要使用与正则表达式\?(.*?)\?
进行延迟匹配,这将导致a "b" "c" d
。
如果在a ?? b
中不能同时存在两个问号,那么它应该是\?(.+?)\?
。所以:
Regex.Replace(text, @"\?(.+?)\?", "\"$1\"");
$1
表示“第一组中识别的内容”,即.+?
识别的内容。
修改:更快的替代方案是:
Regex.Replace(text, @"\?([^\?]+)\?", "\"$1\"");
[^\?]
表示“\?
以外的任何内容”。
答案 1 :(得分:1)
您的正则表达式应为/^\?([^?]+)\?$/
:http://refiddle.com/gmw
答案 2 :(得分:1)
答案 3 :(得分:-1)
尝试
s/\?(.*)\?/$1
它抓住了#34;?"
之间的字符