У меня есть строка, которая выглядит следующим образом:
"#Text() #SomeMoreText() #TextThatContainsDelimiter(#blah) #SomethingElse()"
Я хотел бы получить обратно
[#Text(), #SomeMoreText(), #TextThatContainsDelimiter(#blah), #SomethingElse()]
ОдинЯ подумал, что нужно сделать так, чтобы #
был экранирован в \#
, что делает входную строку:
"#Text() #SomeMoreText() #TextThatContainsDelimiter(\#blah) #SomethingElse()"
Затем я могу разделить его, используя /[^\\]#/
, что дает мне:
[#Text(), SomeMoreText, TextThatContainsDelimiter(\#blah), SomethingElse()]
Первый элемент будет содержать #
, но я могу его убрать.Однако есть ли более чистый способ сделать это, не выходя из #
, и который гарантирует, что первый элемент не будет содержать #
?По сути, я бы хотел, чтобы оно делилось на #
, только если #
не заключено в круглые скобки.
Я догадываюсь, что, поскольку #
является контекстно-зависимым, а регулярные выражения подходят толькодля строк без контекста это может быть неправильный инструмент.Если да, должен ли я написать для этого грамматику и развернуть свой собственный анализатор / лексер?