如何更换'?'来自?word1 word2?与正则表达式

时间:2013-04-01 15:27:06

标签: c# regex

我们正在从某人制作的错误导出中导入一些文本,并且它中充满了双引号的问号字符。

是否有正则表达式替换我可以用?替换"?例子:

?foo? => "foo"
?foo bar? => "foo bar"
foo? => foo?

4 个答案:

答案 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)

正则表达式

/\?\b(.+?)\b\?/g

应该这样做 - 匹配need to be escaped旁边的所有问号(word boundaries),然后执行non-greedy

答案 3 :(得分:-1)

尝试

s/\?(.*)\?/$1

它抓住了#34;?"

之间的字符
相关问题