2017-01-31 2 views
1

Мне нужно извлечь два числа внутри строки. Они могут выглядеть следующим образом:Получить два номера из строки

(0,0) 
(122,158) 
(1,22) 
(883,8) 
etc... 

Так что я хочу, чтобы получить первое число перед запятой и число после запятой и сохранить их в переменных. Я могу получить первый номер следующим образом:

myString.split(',')[0][1:]) 

Однако я не могу понять, как получить следующий номер.


Спасибо за помощь всем!

+0

Использование регулярных выражений https://docs.python.org/2/library/re.html –

+0

В вашем опубликованном коде '[0]' относится к первому номеру. Поэтому просто '[1]' получить второе число. – spicypumpkin

+0

Это также печатает круглые скобки. Я просто хочу цифры. –

ответ

2

Он должен работать с чем-то вроде

myVar.split(',')[0][1:] # = 122 for the string in the second line 
myVar.split(',')[1][:-1] # = 158 for the string in the second line 

Это должно быть самым простым способом сделать это

+0

@ Posh_Pumpkin Я понял это, как только я опубликовал, мои пальцы были быстрее моего мозга :-) –

2

Вы можете избавиться от скобок, разделить строку и преобразовать каждый элемент в INT:

a, b = [int(x) for x in s[1:-1].split(',')] 

конечно, если вы абсолютно уверены о т он формат струна, и не заботится о безопасности, вы можете просто eval строка:

a, b = eval(s) 
1

несколько присваивания, stripping скобки и расщепление будут делать:

a, b = myString.lstrip('(').rstrip(')').split(',') 
# a, b = map(int, (a, b)) 
1
myVar.split(',')[1][:-1]) 

поможет вам второй номер

2

Вы можете использовать ast.literal_eval(), чтобы преобразовать строку в кортеж. Это также позаботится о дополнительных пробелах, таких как '(123, 158)'.

>>> from ast import literal_eval 
>>> tup = literal_eval('(122,158)') 
>>> tup[0] 
122 
>>> tup[1] 
158 

Или просто:

>>> first, second = literal_eval('(122,158)') 
1

Простейшим один лайнер будет

a, b = (myString[1:-1].split(',')[0], myString[1:-1].split(',')[1]) 

избавляется от скобок, затем расщепляется на запятой.

Смежные вопросы