2010-12-12 9 views
1

Когда нам нужно нарезать строку в определенном месте, нам нужно знать индекс, из которого мы хотим.Нарезка строки в Python

Например, в строке:

>>> s = 'Your ID number is: 41233' 

Я хочу, чтобы нарезать строку, начиная с : и получить номер.

Несомненно, я могу count, с каким индексом : есть и после этого разрезать, но это действительно хороший подход?

Конечно, я могу сделать s.index(':'). Но это было бы дополнительным шагом, поэтому я придумал что-то вроде:

>>> print s[(s.index(':')+2):] 
41233 

Но почему-то мне не нравятся его взгляды.

Итак, мой вопрос, учитывая длинную строку, которую вы хотите нарезать, как вы находите индекс от того, где начинать нарезку самым простым и читаемым способом? Если есть уловка, чтобы сделать это в устной форме, я хотел бы это узнать.

+0

Вы можете также использовать регулярное выражение. Это зависит от того, насколько сложна строка. – Falmarri

ответ

3

Может быть, вы могли бы использовать split():

>>> s = 'Your ID number is: 41233' 
>>> print s.split(":")[1].strip() 
41233 
+0

Интересно. Это выглядит намного лучше. – user225312

+0

Я бы сделал это так, если бы меня никогда не беспокоило, что разделитель не существует: 'print s.split (": ") [- 1] .strip()' В противном случае я бы поставил его в предложение try , Кроме того, если бы было как-то 2 разделителя, это даст вам последнюю группу раскола. – jgritty

1

Другой подход 'Your ID number is: 41233'.split(':')[1].strip().

3
text, sep, number = 'Your ID number is: 41233'.partition(':') 
print number 

также работает. Но это не сработает, если разделитель не находится в строке.

Это распаковка работает для раскола тоже:

text, number = 'Your ID number is: 41233'.split(':',1) 
+0

+1, хорошо! (...) – user225312

0

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

Когда «где начинать нарезку» является конкретным символом, вы этого не делаете; вместо этого вы точно так же, как Python до split, добавьте строку с этим символом в качестве разделителя, или partition в биты до/внутри/после символа, как и в других ответах. (split может разбить строку на несколько частей, если обнаружены несколько разделителей, partition всегда будут давать три части, даже если символ не существует вообще.)

Если есть трюк, чтобы сделать это в устной форме, я бы люблю это знать.

Я действительно не думаю, что вы имеете в виду «orally». :)

0

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

import re 
compile_obj = re.compile(r'Your ID number is:\s(?P<ID>\d+)') 

s = 'Your ID number is: 41233' 
match_obj = compile_obj.search(s) 
if match_obj: 
    print match_obj.group('ID') 
# 41233 
0

Недавно наткнулся раздела

string = "Your ID number is: 41233" 

string = string.partition(':') 

print string[2] 
Смежные вопросы