#regex #matlab
#регулярное выражение #matlab
Вопрос:
В следующей строке: quantity = 100;
я хотел бы использовать регулярное выражение, чтобы получить 100
.
Почему не возвращается следующее регулярное 100
выражение??
regexp('quantity=100;','(?=w*s*=s*)[^] (?=s*;$)','match','once')
Ответ №1:
Регулярное выражение, соответствующее любой цифре, равно d
. Итак, если ваши строки имеют только форму text=numbers
, то будет работать следующее.
digits = regexp( 'quantity=100;', 'd', 'match');
result = [digits{:}]
result =
'100'
Обратите внимание, что MATLAB возвращает массив ячеек совпадений. Таким образом, вы не можете использовать 'once'
, потому что оно будет возвращать только 1
.
Комментарии:
1. Это может быть упрощено до
result = regexp( 'quantity=100;', 'd ', 'match')
Ответ №2:
Вы должны использовать отрицательное регулярное выражение look ahead в начале, попробуйте это:
regexp('quantity=100;','(?<=w*s*=s*)[^] (?=s*;$)','match','once')
или
regexp( 'quantity=100;', '(?<=^.*=s*)(.*)(?=s*;$)', 'match', 'once' )
что намного проще
Комментарии:
1. Я никогда не видел, чтобы [^] на самом деле компилировался без ошибок. Должно быть, это что-то из Matlab.