Професионална програма
Loading...
+ Нов въпрос
Blhammer avatar Blhammer 4 Точки

Въпрос за Regex

Здравейте, ако имам да проверя текст:

$Request$: [73]|[115]|[105]|
%Taggy$: [73]|[73]|[73]|
%Taggy%: [118]|[97]|[108]|
$Request$: [73]|[115]|[105]|[32]|[75]|

и условието ми за проверката на Regex-а е:

•There is nothing else before and after it

•It starts with a tag, which is surrounded by either '$' or '%' (but not both at the same time), the tag itself has to be minimum 3 characters long, start with a uppercase letter, followed only by lowercase letters

•There is a colon and a single white space after the tag

•There are 3 groups consisting of numbers between [' and'], followed by a pipe (|)

Как трябва да се напише Regex-а без да включва различните специални символи. - както при %Taggy$

Благодаря!

Тагове:
0
Programming Fundamentals 14/12/2020 16:04:30
MartinBG avatar MartinBG 3859 Точки

За да третираме специалните символи в регекса като обикновени такива, трябва да ги ескейпнем с \

За конкретният регекс, може да се напише така:

^([$%])(?<tag>[A-Z][a-z]{2,})\1: \[(?<first>\d+)\]\|\[(?<second>\d+)\]\|\[(?<third>\d+)\]\|$

Демо

0
Blhammer avatar Blhammer 4 Точки

Благодаря!

 
1
DoroteyaDoncheva avatar DoroteyaDoncheva 5 Точки

Здравей!

Ето един работещ Regex, който дава 100/100.

(\*|\@)[A-Z][a-z]{2,}\1\:\s{1}(\[[A-Za-z]+\]\|){3}\z

За да не са ти различни символите, правиш група обградена със скоби (\*|\@).

Знакът "|" инициира "или". Можеш да поставиш знаците и в квадратни скоби ([\*\@]), но нормалните скоби са задължителни за обозначаването на група.

След това извикваш групата чрез \1 в този случай, тъй като е първата обозначена група.

Поздрави!

 

 

0
14/12/2020 11:05:20
Blhammer avatar Blhammer 4 Точки

Благодаря!

0