Я довольно новым в регулярных выражениях, и я столкнулся с проблемой, которую я не могу понять:Regex - Использование * с набором символов
Я пытаюсь соответствовать набору символов, которые начинаются с произвольное число символов AZ, 0-9 и _, которые могут необязательно сопровождаться числом, заключенным в один набор скобок, и могут быть отделены от исходной строки пробелом (или нет)
Примеры того, что это должно найти:
_ABCD1E
_123FD(13)
ABDF1G (2)
Это мое текущее выражение регулярного выражения:
[A-Z_0-9]+\s*\({0,1}[\d]*\){0,1}
Это находя все просто отлично, но проблема существует, если у меня есть следующие:
_ABCDE)
Нужно только захватить _ABCDE, а не «)», но в настоящее время он захватывает «_ABCDE)»
Есть ли способ, которым я могу захватить (#), но не получить лишние символы, если весь шаблон не существует?
Если возможно, объясните синтаксис, как я пытаюсь узнать, а не просто получить ответ.
ОТВЕТ: Следующий код работает для того, что мне нужно было до сих пор:
[A-Z_0-9]+(\s*\([\d]+\)){0,1}
# or, as has been mentioned, the above can be simplified
# and cleaned up a bit to be
[A-Z_0-9]+(\s*\(\d+\))?
# The [] around \d are unnecessary and {0,1} is equivalent to ?
Добавление круглых скобок вокруг (#) модель позволяет для использования? или {0,1} по всему шаблону. Я также изменил [\ d] * на [\ d] +, чтобы обеспечить хотя бы одно число внутри круглых скобок.
Спасибо за быстрые ответы, все!
Am не ясно, о чем ваши требования является. Вы хотите разрешить '_ABCD1E' и' _123FD (13) 'и не разрешать' _ABCDE) '? Или вы хотите узнать, соответствует ли подстрока ввода условию? –
Да, если есть круглые скобки, они должны быть окружены рядом. Он также должен избегать пробелов после начальной строки, если (#) не существует. – Austin
не нужно помещать '\ d' внутри класса символов. и '{0,1}' эквивалентно '?' –