0

誰かが作成した不適切なエクスポートからいくつかのテキストをインポートしていますが、以前は二重引用符があった場所に疑問符がいっぱいです。

に置き換えるためにできる正規表現の置き換えはあり?ます"か? 例:

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

4 に答える 4

2

正規表現を使用して、マーク\?(.*)\?間の何かを一致させることができます。?

しかし、そのようにすると、例では最長の部分文字列に一致するため、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\"");

[^\?]「以外\?」という意味です。

于 2013-04-01T15:36:44.653 に答える
1

正規表現

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

する必要があります -単語の境界に隣接するすべての疑問符 (エスケープする必要があります) に一致し、貪欲ではありません。

于 2013-04-01T15:42:39.430 に答える
1

あなたの正規表現は次のようになります/^\?([^?]+)\?$/: http://refiddle.com/gmw

于 2013-04-01T15:35:16.573 に答える
-1

試す

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

「?」の間の文字を取得します。

于 2013-04-01T15:31:47.550 に答える