Регулярное выражение для BMHT в последовательности

#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. Если я изменю региональные настройки на что-то другое, как я могу проверить, что следующее не работает?