I'm using regexp to pull a version number from a text file:
returned = string(regexp (filetext, '(?<=Version_String )[A-Z]*\d*.\d*.\d*.\d*', 'match'))
This returns a string
"YZ1.1.2.3"
which is good.
When I try and extract just the numbers and decimal point from this string with
version = regexp (returned, '\d*.\d*.\d*.\d*', 'match')
I get:
version = 1x2 string array "YZ1.1" ".2.3"
which is not what I was expecting. I was hoping for 1.1.2.3
Can someone explain why this is returned and possibly how to fix it please?
edit: Apologies to all, I missed the decimal points after the \d, I have corrected. I wrote this on my phone in my lunch break!

1 件のコメント

Stephen23
Stephen23 2019 年 7 月 3 日
編集済み: Stephen23 2019 年 7 月 3 日
I don't see anything in any of your regular expressions that would match the points.
When I test your first example, I do not get the result that you have shown us:
>> S = 'A B C Version_String YZ1.1.2.3 X Y Z';
>> regexp(S, '(?<=Version_String )[A-Z]*\d*\d*\d*\d*', 'match')
ans =
'YZ1'
which is exactly what I would expect (as the matching fails at the first dot character).

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

 採用された回答

Guillaume
Guillaume 2019 年 7 月 3 日

0 投票

  • \d*\d*\d*\d* is exactly the same as \d*, match 0 or more digits. It probably would be better as \d+, match 1 or more digits
  • That regular expression cannot return anything with letters or dots in it, so it's clearly not what you are using.

1 件のコメント

Stephen
Stephen 2019 年 7 月 4 日
Yes, thank you, disregarding the errors I made when writing up the question, the problem was using * instead of +

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

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File ExchangeCharacters and Strings についてさらに検索

製品

リリース

R2019a

タグ

質問済み:

2019 年 7 月 3 日

コメント済み:

2019 年 7 月 4 日

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by