下面是我的代碼獲取代碼(總是在括號中,始終有3個字符)的字符串:它是python中最簡單的子字符串嗎?
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
我能寫簡單的?
下面是我的代碼獲取代碼(總是在括號中,始終有3個字符)的字符串:它是python中最簡單的子字符串嗎?
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
我能寫簡單的?
如果你一定有這樣的格式爲什麼不直接使用:
s.strip()[-4: -1]
當然,它不檢查你的字符串格式。如果你想這樣做,使用re模塊(正則表達式)。
希望這有助於
低糜
>>> 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'
>>>
這更簡單,但也更脆弱。如果字符串不以')'結尾,則會中斷,這是不好的。 – x10 2011-02-25 11:42:26
@ x10:它不是**更脆弱。它給出了與OP表達式完全相同的結果。 – 2011-02-25 11:45:51
不,這是不夠好。你可以創建一個接受一個字符串並返回格式的函數。
此外,請不要使用len(raw_text)-1,因爲這會導致「意大利(BGN)」等不良數據失敗。
def get_code(str):
return str[str.find('(')+1:str.find(')')]
formatted_text = get_code(raw_text)
隱藏內置插件是一種非常不好的習慣。 – 2011-02-25 11:47:48
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)
會做(用正則表達式)的另一種方式。
您可以使用正則表達式
>>> import re
>>> re.search('\((.{3})\)', 'Spain (BCN)').group(0)
'BCN'
業有肯定的是。
raw_text='Spain (BCN) '
print raw_text.rstrip(" ")[-4:-1]
使用rstrip刪除尾隨空格,例如修剪。 然後,只需返回4個字符,至-1個字符。
拼接一個字符串是[start:stop]
而您正在停止len(raw_text)-1
- 總是倒數第二個字符。如果你知道代碼繼續字符串的結束,和你說這始終是三個字符長的話:
formatted_text=raw_text[-4:-1]
將提取從字符串
月底開始4三個大字
2行有什麼問題? – 2011-02-25 11:39:08
你也可以使用正則表達式....所以檢查're'模塊的文檔...它是正則表達式基礎... – 2011-02-25 11:41:02
@同步Quacker:第二行是臃腫的。 – 2011-02-25 11:42:24