using regexp with negative and positive floating numbers

data =
'0.00640869<'
'0.00640869<'
'-0.00598145'
'-0.00598145'
'-0.0010376<'
'-0.0010376<'
'-0.00604248'
'-0.00213623'
'0.00567627<'
'-0.00219727'
'0.00567627<'
% 11x1 cell
to remove the non-numeric character;
data_num = regexp(data,'[0-9]+.[0-9]+', 'match');
In this case, negative signs (-) are also removed. How can I modify this code to get - signs?

 Réponse acceptée

Stephen23
Stephen23 le 24 Mai 2017
Modifié(e) : Stephen23 le 24 Mai 2017
regexp(data,'[+-]?\d+\.?\d*', 'match');
Notes:
  1. important: . does NOT match the period character, but in fact it matches any character. To only match the period, you need to escape it: \.
  2. \d matches any digit, and is simpler than writing [0-9]
  3. by making the decimal fraction optional my answer will also match integer values
Read the MATLAB documentation for more information:
You might also like to try my FEX submission, which lets you experiment with regular expressions and see their output in real time (as you type):

5 commentaires

The \.? should not have the ? because if the . is missing, that would be like \d+\d* in a row. Instead, if the . is optional, then
'[+-]?\d+(\.\d*)?'
Stephen23
Stephen23 le 24 Mai 2017
Modifié(e) : Stephen23 le 24 Mai 2017
Why would \d+\d* be a problem? My tests showed that it correctly matches any integer, exactly as I intended, and I don't see how it would cause any problems for this use case. Can you please explain.
It is redundant -- you already matched all the possible digits in a row with the \d+ and then you spin looking for optional digits.
Stephen23
Stephen23 le 24 Mai 2017
Modifié(e) : Stephen23 le 24 Mai 2017
@Walter Roberson: the tests I just ran showed that your code is actually slightly slower (1e5 iterations):
Elapsed time is 3.67537 seconds. % \.?\d*
Elapsed time is 3.91039 seconds. % (\.\d*)?
I have no idea how TMW implements this, or whether it would be stable between versions...
Works great to me! Thanks @Stephen23

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Characters and Strings dans Centre d'aide et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by