1

I have a string: string = "2017.5 is halfway through the year". Is there a way to extract this "2017.5" from the string? I tried using string.isdigit(), but that only worked for non-floats.

3 Answers3

2

If your float is always expressed in decimal notation something like

>>> import re
>>> re.findall("\d+\.\d+", "2017.5 is halfway through the year")
['2017.5']

may suffice.

For parse int and float (point separator) values:

re.findall( r'\d+\.*\d*', '2017.5 is halfway through the year' )

result:

['2017.5']
Vignesh Kumar A
  • 27,863
  • 13
  • 63
  • 115
1

here is an example using re.match:

>>> import re
>>> ok = '2017.5 and some stuff'
>>> hmm = re.match(r'[0-9\.]+', ok)
>>> hmm.group()
'2017.5'

r'[0-9\.]+' is a regex to extract the group that matches numbers and periods

jmunsch
  • 22,771
  • 11
  • 93
  • 114
0

just a dirty implementation without regex and with the single digit/float per sentence:

s = "new 2017.5 is halfway through the year1"

def process(all,new):

    def is_float_try(str):
        try:
            float(str)
            return True
        except ValueError:
            return False

    return new if new.isdigit() or is_float_try(new) else all

print reduce(process,s.split(),'')
# 2017.5
brc
  • 249
  • 2
  • 6