文字列の前後の空白をアンダースコアの数で置き換えます。先頭と末尾の空白のみをcでregexを使って下線で置き換えます。#
入力文字列
" New Folder "
(注:前に1つの空白と、この文字列の最後に2つの空白があります)
出力
私の欲求の出力は、文字列"_New Folder__"
(出力文字列の先頭に1つのアンダースコアがあり、2つのアンダースコアが。エンド)
文字列の前後の空白をアンダースコアの数で置き換えます。先頭と末尾の空白のみをcでregexを使って下線で置き換えます。#
入力文字列
" New Folder "
(注:前に1つの空白と、この文字列の最後に2つの空白があります)
出力
私の欲求の出力は、文字列"_New Folder__"
(出力文字列の先頭に1つのアンダースコアがあり、2つのアンダースコアが。エンド)
一つの解決策は、コールバックを使用している:
s = Regex.Replace(s, @"^\s+|\s+$", match => match.Value.Replace(' ', '_'));
または前後参照(少しトリッキー)を使用して:
s = Regex.Replace(s, @"(?<=^\s*)\s|\s(?=\s*$)", "_");
あなたはまた、非正規表現のソリューションを選択しますが、私も
StringBuilder sb = new StringBuilder(s);
int length = sb.Length;
for (int postion = 0; (postion < length) && (sb[postion] == ' '); postion++)
sb[postion] = '_';
for (int postion = length - 1; (postion > 0) && (sb[postion] == ' '); postion--)
sb[postion] = '_';
s = sb.ToString();
私は正規表現の質問に多すぎる答えをしたと思いますが、これを行う良い方法があると確信しています: 'P' – Kobi
もう一度、 'new String( '_'、match.Length)'がここでより適切かもしれません。しかたがない。 – Kobi
間違いなく。実行されていることがより明白なだけでなく、スペース以外の空白文字を処理する利点もあります。 – Brian