2009-06-26 11 views
1

私が探しているのは、機能テストで使用するために、指定された文字列の大文字小文字を混在させるRegExです。文字列中の文字をランダムに設定するRegEx

例入力:

The Quick Brown fox jumps over the Lazy Dog. 

サンプル予想される出力:

tHe QUiCk BrOwn FoX jUMPs OvER tHe lAzY dOg. 

出力は正規表現が適用されたたびに違っていた場合、それはいいだろう。例えば、上記の入力、正規表現が適用された別の時間を与えられ、出力は次のようになります。

THe qUIcK bROwN fOX JuMpS oVeR THe lAzy DoG. 

私は簡単に置換テーブルを設定するのは簡単だろうことを知っている(例えば、「X」=> ' X '、' B '=>' b ')、それは私が探しているものではありません。

私はこれをGoogleの検索で行いました。私はこれをしたコード(今は失われていた)を持っていた。

+3

文字列内の文字をループすることができず、そのようにランダムに設定できない理由はありますか?何語?真剣に –

答えて

2

:C#では、あなたはこのようなものを使用してそれを達成することができ-zA-Z])/ rand()< .5? UC($ 1):LC($ 1)/ GE;印刷」

はそれを数回走った...

  • 速い茶色のキツネが速い茶色のキツネジャンプ
  • のろまなイヌに飛びかかっ
  • レイジードッグにわたって速い茶色のキツネクイックブラウンフォックス レイジードッグ
  • 飛び越え
  • レイジードッグ飛び越え速い茶色のキツネは のろまなイヌに飛びかかっ 速い茶色のキツネが のろまなイヌに飛びかかっ
  • 速い茶色のキツネが のろまなイヌに飛びかかっ
  • 速い茶色のキツネが レイジードッグ 飛び越え
+0

ダブルプラスありがとうございます! – BryanH

4

RegExは、決定的で無作為な処理を行うと想定されています。 S /([A;これは

のperl -e「$ _ = "速い茶色のキツネは、のろまなイヌに飛びかかった" 作品のperlで

var random = new Random(); 
var result = new string(((IEnumerable<char>)input.ToLowerInvariant()) 
       .Select(x => random.Next(2) == 0 ? x : Char.ToUpperInvariant(x)) 
       .ToArray()); 
+1

。簡単な答えは「しない」です。 –

+0

@Daniel:スパマーのいくつかのユースケースを考えることができます;) –

+0

ありがとうございます - しかし、C#はOS固有のものです。私はWindowマシンでこれを実行していません。ほとんどの場合、機能のテストを実行するためにX + Wine/Monoをインストールするのは、ヘッドレスLinuxボックスで実行されます。 – BryanH

0

正規表現は素晴らしいですが、常に最適な解決法ではありません。ここで

は、あなたが欲しいものを行うには、いくつかの簡単な擬似スクリプトです:

ここでの唯一の正規表現はsplit関数である - 文字の配列に変換します。 多くの言語では文字列を文字の配列として扱うことができますので、そのビットは必要ではないかもしれません。

MyArray = MyString.split('[\b\B]') 

for each (Character in MyArray) 
{ 
    if (Random(0,1) > 0.5) 
    { 
     Character = Uppercase(Character) 
    } 
    else 
    { 
     Character = Lowercase(Character) 
    } 
} 

MyString = MyArray.join() 
0

これは正規表現である必要はありません。Pythonで:

関連する問題