#regex
#регулярное выражение
Вопрос:
Я пытаюсь создать регулярное выражение. Сокращения следующие:
B - Billion
M - Million
T - Thousand
H - Hundred
Теперь, если я говорю, 3M2T
это означает 3 million 2 thousand
Но я не могу сказать 3T2M
или я не могу сказать 3M2222T
BMTH должно быть в последовательности и должно следовать стандартному правилу для создания числа.
Я дошел до этого
([0-9] [B]){1} ([0-9] [M])? ([0-9] [T])? ([0-9] [H])?
Но здесь B является обязательным.
Пожалуйста, помогите.
Ответ №1:
Попробуйте это:
^(?:d B)?(?:d{1,3}M)?(?:d{1,3}T)?(?:dH)?$
Вы можете протестировать это здесь regexr.com ?2-й уровень
(?:)
не является группой захвата, в противном случае захваченная часть сохраняется в переменной
d
равно [0-9]
?
после группы или символа делает его необязательным
означает один или более
{1,3}
указывает по крайней мере один раз и не более трех случаев
[M]
не требуется, когда есть только 1 символ, тогда достаточно только M
Комментарии:
1. Спасибо за довольно быстрый ответ. Я использовал его, и это сработало. Я хотел бы получить некоторые рекомендации по более подробному изучению регулярных выражений.
2. @prasanna Очень хорошим источником информации является www.regular-expressions.info . Оно охватывает множество различных вариантов регулярных выражений. Осмелюсь сказать, что базовое регулярное выражение везде (почти) одно и то же, но когда вы углубляетесь в детали, есть действительно различия, о которых вы должны знать. Для Perl здесь есть perlretut и perlrequick . Я уверен, что есть также хорошие руководства для вашего языка программирования. И есть несколько онлайн-инструментов для тестирования, подобных тому, что в моем ответе
Ответ №2:
([0-9]{1,3}B)?([0-9]{1,3}M)?([0-9]{1,3}T)?([0-9]H)?
Занимает до 3 цифр для каждого B / M / T или 1 для H (в таком порядке), каждая из групп необязательна. Добавьте ограничения, соответствующие вашим потребностям… Обратите внимание, что [0-9]
не обязательно равно d
, это зависит от региональных настроек и прочего.
Комментарии:
1. Это также соответствует пустой строке (что может быть или не быть желательным).
2. Если я изменю региональные настройки на что-то другое, как я могу проверить, что следующее не работает?