我正在寻找的是一个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')会很容易,但这不是我正在寻找的对
我在谷歌搜索了这个并没有提出任何建议,尽管我知道它已经完成了。我有代码(现在丢失了)这样做。
答案 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'
跑了几次......
答案 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'