2015-07-09 2 views
1

Я пытаюсь сопоставить операторы Matlab в строке. Эти операторы могут быть "+", "-", "*", "/", ".*", "./", и т. Д. (Я заключу операторы в ", чтобы указать, что в Matlab есть двухсимвольные операторы).Regex: Соответствующие арифметические операторы и двухсимвольные операторы

Набор символов работает без проблем для односимвольных операторов. Например, это регулярное выражение [\+\-\*\/] соответствует операторам один символьных просто отлично в следующей тестовой последовательности:

myVar = 1.0 * 5 + 1/2 + a .* b + a ./ b; 

Проблема возникает, когда я пытаюсь включить операторы двухсимвольных. Следующее выражение [\+\-\*\/\.\*] также соответствует . в 1.0.

Будучи новичком в регулярных выражениях, я попытался включить группу внутри набора символов, подобного этому [\+\-\*\/(\.\*)], но он не работает.

Любая идея, как я могу включить двухсимвольный элемент в набор символов?

+0

Btw, только '/' и ']' должен быть экранирован внутри класса символов, если вы поместили тире в качестве последнего символа. –

ответ

0

Вам нужно поместить этот шаблон из двух символов внутри группы.

(\.[\/*]|[+*\/-]) 

DEMO

0

Вы должны использовать чередование, если вы хотите, чтобы соответствовать более чем одному символу за раз:

(?:\.[*\/]|[+*\/-]) 

Demo

(?: ...) синтаксис для создания группы без захвата памяти.

Смежные вопросы