Regex (C#): замените \n \r\n

Это означает, что 1 из 5 ударов должен быть критическим. Проблема в том, что у меня очень плохие результаты в реальной жизни - иногда игроки получают 3 крита в 5 ударах, иногда ни один из 15 попаданий.

blockquote>

Что вам нужно сумка в случайном порядке . Это решает проблему истинного случайного, слишком случайного для игр.

Алгоритм выглядит примерно так: вы помещаете 1 критический и 4 некритических попадания в сумку. Затем вы производите свой заказ в сумке и выбираете их по одному. Когда сумка пуста, вы снова заполняете ее теми же значениями и производите ее. Таким образом, вы получите в среднем 1 критический удар за 5 ударов и не более 2 критических и 8 некритических ударов подряд. Увеличьте количество предметов в сумке для большей случайности.

Ниже приведен пример реализации (в Java) и его тестовых случаях , что I написал некоторое время назад.

38
задан dbkk 26 June 2011 в 16:14
поделиться

4 ответа

Это сделает?

[^\r]\n

В основном это соответствует '\n', которому предшествуют с символом, который не является '\r'.

, Если Вы хотите, чтобы он обнаружил строки, которые запускаются только с единственного '\n' также, затем попробуйте

([^\r]|$)\n

, Который говорит, что это должно соответствовать '\n', но только те, который является первым символом строки или тех, которые являются не , предшествовали с '\r'

могли бы быть особые случаи для проверки, так как Вы смешиваете с определением строк самим, '$' не мог бы работать слишком хорошо. Но я думаю, что необходимо получить идею.

РЕДАКТИРОВАНИЕ: кредит @Kibbee Используя предвидение s ясно лучше, так как это не получит подобранный предшествующий символ и должно помочь с любыми пограничными случаями также. Таким образом, вот лучший regex +, код становится:

myStr = Regex.Replace(myStr, "(?<!\r)\n", "\r\n");
44
ответ дан neural5torm 27 November 2019 в 03:05
поделиться

Это могло бы быть быстрее при использовании этого.

(?<!\r)\n

Это в основном ищет любой \n, которому не предшествует \r. Это, скорее всего, было бы быстрее, потому что в другом случае, почти каждая буква соответствия [^\\r], таким образом, это получит это, и затем искать \n после этого. В примере я дал, он только остановится, когда он нашел, что \n и они взгляд перед этим видели, нашел ли он \r

62
ответ дан Kibbee 27 November 2019 в 03:05
поделиться

Я предполагаю, что "myStr" является объектом Строки типа, в этом случае, это не regex. \r и \n являются эквивалентами для CR и LF.

Мое лучшее предположение то, что, если Вы знаете, что у Вас есть \n для КАЖДОЙ строки, неважно, что, тогда сначала необходимо разделить каждый \r. Тогда замените весь \n \r\n.

ответ chakrit дает, также пошел бы, но тогда необходимо использовать regex, но так как Вы не говорите, каков "myStr"...

Edit:looking в других примерах говорит мне одну вещь.. почему делают трудные вещи, когда можно сделать это легкий?, поскольку существует regex, не то же, поскольку "должен использовать": D

Edit2: инструмент очень ценен при игре с regex, xpath, и этажерка, которая дает Вам странные результаты, может я указывать на Вас на: http://www.regexbuddy.com/

3
ответ дан neslekkiM 27 November 2019 в 03:05
поделиться
myStr.Replace("([^\r])\n", "$1\r\n");

$, возможно, должен быть \

1
ответ дан Chris Marasti-Georg 27 November 2019 в 03:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: