RegEx для случайного задания регистра символов в строке - PullRequest
1 голос
/ 26 июня 2009

То, что я ищу, это 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'), но это не то, что я ищу.

Я сделал поиск в Google и ничего не нашел, хотя знаю, что это было сделано. У меня был код (теперь потерянный), который сделал это.

Ответы [ 4 ]

4 голосов
/ 26 июня 2009

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());
2 голосов
/ 26 июня 2009

в Perl это работает

perl -e '$ _ = "Быстрая коричневая лиса перепрыгивает через ленивую собаку"; s / ([a-zA-Z]) / rand () <. 5? uc (1 доллар): lc (1 доллар) / ge; print '</p>

запускал его несколько раз ...

  • БЫСТРЫЙ БРОНАТ ДЛЯ ЛОСОВ lAzy DoG
  • УТВЕРЖДАЮТ УТВЕРЖДАЕМЫЕ ЛИСЫ Ленивая собака
  • БЫСТРЫЙ БРАУН Фокс Прыжки через Ленивый Дог
  • КРАТКИЙ БРАУН Фокс, Прыжки через LAZY DoG
  • БЫСТРЫЙ коричневый КОЖАНЫЙ ФОКС-ЮМПС LAzy doG
  • БЫСТРЫЙ КОРОБК ФОКС прыгает через LAzy Dog
  • УТВЕРЖДАЮЩИЙСЯ ВЫДЕРЖКА LAzy doG
  • БЫСТРЫЙ БРОНИРОВАНИЕ ПЕРЕХОДОВ LaZY DOG
0 голосов
/ 27 июня 2009

Это не должно быть регулярным выражением. В 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'
0 голосов
/ 27 июня 2009

Регулярные выражения - это хорошо, но они не всегда являются лучшим решением.

Вот простой псевдоскрипт для того, что вы хотите:

Единственное регулярное выражение здесь в функции 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...