функция regexprep не может принять \ b, чтобы найти диапазон номеров - PullRequest
0 голосов
/ 17 мая 2018

Я пытаюсь использовать подстановку регулярного выражения для следующих типов строк:

'y = 0'
'y = 10'
'y = 23'

Я хочу, чтобы замена возвращала число, только если оно лежит в диапазоне от 1 до 22. (т. Е. Меньше 1 и больше 22 вернет какой-то другой результат)

У меня написано следующее, и я не могу понять, почему это не сработает:

regexprep('y = 5', 'y = '\b([1-9]$|1[0-9]|2[0-2])\b', '$1')

Есть ли что-то, чего мне не хватает в синтаксисе здесь? Я обнаружил, что если я удалю \b, то получу правильный результат для:

regexprep('y = 0', 'y = ([1-9]|1[0-9]|2[0-2])', '$1')

т.е. без изменений, и для чисел от 1-22 я получаю правильный результат, но тогда все числа, больше 22, также заменяются на $1. Понятия не имею почему. Любая помощь будет отличной. Спасибо.

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Использование регулярных выражений: ^y\s=\s(?:[1-9]|1[0-9]|2[0-2])$

и используйте функцию regexp вместо regexprep, как указано здесь

matchStr = regexp('y = 1','^y\s=\s(?:[1-9]|1[0-9]|2[0-2])$','match')

Демо

0 голосов
/ 17 мая 2018
regexprep(y = 5', 'y = '\b([1-9]$|1[0-9]|2[0-2])\b', '$1')

Это недопустимый синтаксис MATLAB для строк.Они должны быть заключены в одинарные кавычки.Но это была, вероятно, просто опечатка.Реальная проблема заключается в том, что \ b в регулярных выражениях MATLAB означает backspace , а не пустой, как в традиционных регулярных выражениях.

regexprep('y = 0', 'y = ([1-9]|1[0-9]|2[0-2])', '$1')

Для этого требуется конец строки $.

regexprep('y = 0', 'y = ([1-9]|1[0-9]|2[0-2])$', '$1')

Еще лучше, разрешить гибкий интервал:

regexprep('y = 0', 'y\s*=\s*([1-9]|1[0-9]|2[0-2])$', '$1')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...