Я искал это, но не смог заставить его работать, поэтому я буду использовать конкретный пример.
Вот строка: [Ah 4d 6s]
Я хочу захватить каждую карту: Ah
, 4d
и 6s
. Загвоздка в том, что может присутствовать разное количество карт: 1, 2, 3, 4 или 5. Вся строка также может отсутствовать.
Я могу заставить его работать, когда [] нет в строке. Пространства доставляют мне проблемы.
Вот что я пробовал:
\[([\dJQKTAdsch]{2}){1,}\]?,
но я получаю сообщение «Повторяющаяся группа захвата будет захватывать только последнюю итерацию. Поместите группу захвата вокруг повторяющейся группы, чтобы захватить все итерации, или вместо этого используйте группу без захвата, если вас не интересуют данные».
Вот все возможности:
mddgfc: checks
Tomi1981: folds
DJPOPS613: folds [Ad]
DJPOPS613: folds [Qh Qc]
SchuDani: folds [2c As Ts]
anshovel: folds [Ad 5d 4h 8h]
pokerpummi: folds [2c 5h Ac 6d 7s]
I expect to parse out : <player name>: <action> <hole cards>
The <hole cards> may or may not be present and are enclosed in square
brackets : [<card1> <card2> ...]
Here is the latest regex I tried :
(.*?)\s?:\s?(\bfolds\b|\bchecks\b)(?:[|(?!^)\G\h+)*([\dJQKTAdsch]{2})*(?=[^][]*])*\s?$
🤔 А знаете ли вы, что...
Java активно развивается и обновляется с появлением новых версий и функциональных улучшений.
Вы можете использовать это регулярное выражение, чтобы получить все совпадения двух символов между [
и ]
:
(?:\[|(?!^)\G\h+)([\dJQKTAdsch]{2})(?=[^]\[]*])
Детали регулярного выражения:
(?:
: Запустить группу без захвата.
\[
: Сопоставьте [
|
: ИЛИ(?!^)
: Убедитесь, что мы не на старте\G
: Начало сразу после окончания предыдущего матча.\h+
: совпадение 1+ пробелов.)
: Завершить группу без захвата.([\dJQKTAdsch]{2})
: сопоставьте 2 символа из заданных разрешенных наборов символов.(?=[^]\[]*])
: Утвердить, что перед нами стоит ]
, прежде чем сопоставить [
или ]
.