Welozbee
Welozbee

Reputation: 45

FInding position of number in string

I would like to separate the letters from the numbers like this

inp= "AE123"
p= #position of where the number start in this case "2"

I've already tried to use str.find() but its has a limit of 3

Upvotes: 1

Views: 1196

Answers (4)

Shubhashish
Shubhashish

Reputation: 64

#Assuming all characters come before the first numeral as mentioned in the question
def findWhereNoStart(string):
   start_index=-1
   for char in string:
        start_index+=1
        if char.isdigit():
             return string[start_index:]
   return "NO NUMERALS IN THE GIVEN STRING"    
   
   
#TEST
print(findWhereNoStart("ASDFG"))
print(findWhereNoStart("ASDFG13213"))
print(findWhereNoStart("ASDFG1"))

#OUTPUT
"""
NO NUMERALS IN THE GIVEN STRING
13213
1
"""
        

Upvotes: 0

Raymond Hettinger
Raymond Hettinger

Reputation: 226694

Extracting the letters and the digits

If the goal is to extract both the letters and the digits, regular expressions can solve the problem directly without need for indices or slices:

>>> re.match(r'([A-Za-z]+)(\d+)', inp).groups()
('AE', '123')

Finding the position of the number

If needed, regular expressions can also locate the indices for the match.

>>> import re
>>> inp = "AE123"
>>> mo = re.search(r'\d+', inp)
>>> mo.span()
(2, 5)
>>> inp[2 : 5]
'123'

Upvotes: 3

Rob
Rob

Reputation: 320

this should work

for i in range(len(inp)):
    if inp[i].isdigit():
        p = i
        break

Upvotes: 0

fourjr
fourjr

Reputation: 329

You can run a loop that checks for digits:

for p, c in enumerate(inp):
    if c.isdigit():
        break

print(p)

Find out more about str.isdigit

Upvotes: 1

Related Questions