RegEx随机设置字符串中的字符大小写

时间:2009-06-26 16:52:36

标签: regex string

我正在寻找的是一个RegEx来混合给定字符串的字符大小写以用于功能测试。

示例输入:

The Quick Brown fox jumps over the Lazy Dog.

预期输出样本:

tHe QUiCk BrOwn FoX jUMPs OvER tHe lAzY dOg.

如果每次应用RegEx时输出都不同,那就太好了。例如,给定上述输入,再次应用RegEx,输出可以是:

THe qUIcK bROwN fOX JuMpS oVeR THe lAzy DoG.

我知道简单地设置替换表(例如,'x'=>'X','B'=>'b')会很容易,但这不是我正在寻找的对

我在谷歌搜索了这个并没有提出任何建议,尽管我知道它已经完成了。我有代码(现在丢失了)这样做。

4 个答案:

答案 0 :(得分:4)

RegEx应该做一些确定性而非随机的事情。在C#中,您可以使用以下内容实现它:

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

答案 1 :(得分:2)

在perl中有效

perl -e'$ _ =“快速的棕色狐狸跳过懒狗”; s /([a-zA-Z])/ rand()&lt; .5? uc($ 1):lc($ 1)/ ge; print'

跑了几次......

  • 这是一个非常有效的方法 lAzy DoG
  • QuiCK在这场比赛中表现出色 LazY Dog
  • 快速推出FOx跳跃 LAZY dOg
  • quicK BroWN Fox JUMPS OVEr The laZY DoG
  • QUICK棕色FOX juMPS OvEr tHe LAzy doG
  • qUick Brown FoX jumps oVeR 懒狗
  • QuiCK已经成为过去的焦点 LAzy doG
  • tCH QUOUK browN fOx jumpe OVer the LaZY dOG

答案 2 :(得分: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()

答案 3 :(得分:0)

它不需要是一个正则表达式。在Python中:

>>> from random import choice
>>> a = "lorem ipsum dolor sic amet"
>>> ''.join(choice((c.lower, c.upper))() for c in a)
'LoREM ipSum DoloR sic AmEt'