kiasy
kiasy

Reputation: 304

Multiple split of input?

I know that you can use split() to split a user input into two, but how would you split input that consists of multiple variables ? For example: User input:

Shawn=14:soccer#2991842

What I would like to do:

name = Shawn
age = 14
course = soccer
idnumber = 2991842

What's the best way to do such thing ?

Upvotes: 0

Views: 274

Answers (6)

wnnmaw
wnnmaw

Reputation: 5514

You could just keep splitting the splits...

text2split = "Shawn=14:soccer#2991842"
name = text2split.split('=')[0]
age = text2split.split('=')[1].split(':')[0]
course = text2split.split('=')[1].split(':')[1].split('#')[0]
idnumber = text2split.split('=')[1].split(':')[1].split('#')[1]

This isn't the most elegant way to do it, but it'll work so long as text2split always has the same delimeters.

Upvotes: 1

user2961646
user2961646

Reputation:

Another thing you can do is use split like: string.split(":"). Then you can change the format to "name:age:course:number"

Upvotes: 1

user1301404
user1301404

Reputation:

str = 'Shawn=14:soccer#2991842'

keys = ['name', 'age', 'course', 'idnumber']
values = re.split('[=:#]', str)

print dict(zip(keys, values))
Out[114]: {'age': '14', 'course': 'soccer', 'idnumber': '2991842', 'name': 'Shawn'}

Upvotes: 3

user2555451
user2555451

Reputation:

I think Regex will work best here:

>>> from re import split
>>> mystr = "Shawn=14:soccer#2991842"
>>> split("\W", mystr)
['Shawn', '14', 'soccer', '2991842']
>>> lst = split("\W", mystr)
>>> name = lst[0]
>>> name
'Shawn'
>>> age = lst[1]
>>> age
'14'
>>> course = lst[2]
>>> course
'soccer'
>>> idnumber = lst[3]
>>> idnumber
'2991842'
>>>

Also, the above is a step-by-step demonstration. You can actually just do:

name, age, course, idnumber = split("\W", mystr)

Upvotes: 2

TDrabas
TDrabas

Reputation: 878

Here's how I would do it.

def splitStr(str):
   temp = str.split(':')

   temp_nameAge = temp[0].split('=')
   temp_courseId = temp[1].split('#')

   name = temp_nameAge[0]
   age = int(temp_nameAge[1])
   course = temp_courseId[0]
   idnumber = int(temp_courseId[1])

   print 'Name = %s, age = %i, course = %s, id_number = %i' % (name, age, course, idnumber)

Upvotes: 1

iruvar
iruvar

Reputation: 23364

If you are ok with storing them under dictionary keys, you could use named group references

import re
x='shawn=14:soccer#2991842'
re.match(r'(?P<name>.*?)=(?P<age>.*):(?P<course>.*?)#(?P<idnumber>.*)', x).groupdict()
{'idnumber': '2991842', 'course': 'soccer', 'age': '14', 'name': 'shawn

Upvotes: 0

Related Questions