誰かが作成した不適切なエクスポートからいくつかのテキストをインポートしていますが、以前は二重引用符があった場所に疑問符がいっぱいです。
に置き換えるためにできる正規表現の置き換えはあり?ます"か? 例:
?foo? => "foo"
?foo bar? => "foo bar"
foo? => foo?
正規表現を使用して、マーク\?(.*)\?間の何かを一致させることができます。?
しかし、そのようにすると、例では最長の部分文字列に一致するため、a ?b? ?c? d結果は になります。a "b? ?c" d?b? ?c?
\?(.*?)\?これを解決するには、正規表現で遅延マッチングを使用する必要がありますa "b" "c" d。
のように 2 つのクエスチョン マークを一緒にできない場合はa ?? b、 にする必要があります\?(.+?)\?。そう:
Regex.Replace(text, @"\?(.+?)\?", "\"$1\"");
は$1、「最初のグループで認識されたもの」、つまり によって認識されたものを意味し.+?ます。
編集:より高速な代替手段は次のとおりです。
Regex.Replace(text, @"\?([^\?]+)\?", "\"$1\"");
[^\?]「以外\?」という意味です。
あなたの正規表現は次のようになります/^\?([^?]+)\?$/: http://refiddle.com/gmw
試す
s/\?(.*)\?/$1
「?」の間の文字を取得します。