Extracting consecutive digits using regexp

4 ビュー (過去 30 日間)
Hau Kit Yong
Hau Kit Yong 2019 年 6 月 22 日
コメント済み: per isakson 2019 年 6 月 22 日
I expected
regexp('ITEM 123', '.+(\d+)', 'tokens')
to return '123'. Why does it only return '3'? What would be the correct expression?

採用された回答

per isakson
per isakson 2019 年 6 月 22 日
編集済み: per isakson 2019 年 6 月 22 日
These two returns "123"
%%
cac = regexp('ITEM 123', '.+?(\d+)', 'tokens' )
%%
cac = regexp('ITEM 123', '[^\d]+(\d+)', 'tokens' )
First, '.+' matches anything up til the end of the text, next it gives back just as little as needed to match '(\d+)' , which is one digit.
'.+?' matches as little as needed so that '(\d+)' is able to match the following text.
I prefer '[^\d]+(\d+)'
Or why not just
cac = regexp('ITEM 123', '\d+', 'match' )
  2 件のコメント
Hau Kit Yong
Hau Kit Yong 2019 年 6 月 22 日
Many thanks! For the first expression, what does the '?' character do? I've only seen it in lookaround operations, but always in the form of '?=', '?<=' etc. and never by itself.
per isakson
per isakson 2019 年 6 月 22 日
Search Quantifiers and Lazy on the page Regular Expressions

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeCharacters and Strings についてさらに検索

タグ


Translated by