Это самая простая подстрока в Python? - PullRequest
1 голос
/ 25 февраля 2011

Ниже приведен мой код, который получает код (всегда в скобках и всегда имеет 3 символа) из строки:

raw_text='Spain (BCN)' #another examples: 'Italy (BGN)' , 'Germany (SXF)'
formatted_text=raw_text[raw_text.index('(')+1:len(raw_text)-1] # BCN,BGN,SFX

Можно ли написать это проще?

Ответы [ 7 ]

3 голосов
/ 25 февраля 2011

Если вы уверены, что этот формат, почему бы просто не использовать:

s.strip()[-4: -1]

Конечно, он не проверяет формат вашей строки. Если вы хотите сделать это, используйте модуль re (регулярные выражения).

Надеюсь, это поможет,

Dimi

3 голосов
/ 25 февраля 2011
import re
raw_text='Spain (BCN)'
formatted_text = re.search(r"""
    (?<=\() # assert that the preceding character is a (
    \w{3}   # match three alphanumeric characters
    (?=\))  # assert that the following character is a )""", 
    raw_text, re.VERBOSE).group(0)

был бы другой способ сделать это (с регулярным выражением).

1 голос
/ 25 февраля 2011

сращивание строки - [start:stop], и вы останавливаетесь на len(raw_text)-1 - всегда последний последний символ. Если вы знаете, что код продолжается до конца строки, и, как вы сказали, он всегда состоит из трех символов, то:

 formatted_text=raw_text[-4:-1]

извлечет три символа, которые начинаются с 4 из конца строки

1 голос
/ 25 февраля 2011

Да, конечно, есть.

raw_text='Spain (BCN)  '
print raw_text.rstrip(" ")[-4:-1] 

Используйте rstrip для удаления задних пробелов, например, обрезки. Затем просто вернитесь на 4 символа к -1 символу.

0 голосов
/ 25 февраля 2011

Вы можете использовать регулярное выражение

>>> import re
>>> re.search('\((.{3})\)', 'Spain (BCN)').group(0)
'BCN'
0 голосов
/ 25 февраля 2011

Нет, это достаточно хорошо.Вы можете создать функцию, которая принимает строку и возвращает ее в формате.

Кроме того, не используйте len (raw_text) -1, поскольку это приведет к сбою неверных данных, таких как «Italy (BGN)».

def get_code(str):
     return str[str.find('(')+1:str.find(')')]

formatted_text = get_code(raw_text)
0 голосов
/ 25 февраля 2011
>>> raw_text='Spain (BCN)'
>>> formatted_text=raw_text[raw_text.index('(')+1:len(raw_text)-1]
>>> formatted_text
'BCN'
>>> raw_text[raw_text.index('(')+1:-1]
'BCN'
>>>

Что делает якобы нехрупкий:

>>> str = 'abcdefgh'
>>> str[str.find('(')+1:str.find(')')]
'abcdefg'
>>>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...