регулярное выражение matlab

#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.