如何更换'?' from?word1 word2?关于Regex

t30tvxxf  于 2023-05-08  发布在  其他
关注(0)|答案(4)|浏览(143)

我们正在从一个错误的导出中导入一些文本,它充满了问号字符,而双引号曾经是。
有没有一个正则表达式替换可以用"替换??示例:

?foo? => "foo"
?foo bar? => "foo bar"
foo? => foo?
8hhllhi2

8hhllhi21#

您可以使用正则表达式\?(.*)\?来匹配?标记之间的内容。
但是如果你这样做,在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\"");

[^\?]的意思是“除了\?以外的任何东西”。

ckx4rj1h

ckx4rj1h2#

正则表达式

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

应该这样做-匹配word boundaries旁边的所有问号(need to be escaped),并且不贪心。

6mw9ycah

6mw9ycah3#

正则表达式应为/^\?([^?]+)\?$/

k97glaaz

k97glaaz4#

试试看

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

它会把字符夹在中间“?“

相关问题