2011-02-25 3 views
1

다음은 코드를 얻을 내 코드입니다 (항상 괄호를, 항상 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 

내가 그것을 쓰기 간단하게 할 수 있습니까?

+0

두 줄의 문제점은 무엇입니까? –

+0

정규 표현식을 사용할 수도 있습니다 .... 그래서 're'모듈의 문서를 확인하십시오 ... 정규 표현식의 기초입니다 ... –

+0

@Comrade Quacker : 두 번째 줄은 비대 해져 있습니다. –

답변

3

를 사용할 수 있습니다. 그렇게하고 싶다면 re 모듈 (정규식)을 사용하십시오. 이 도움이

희망,

Dimi이

0
>>> 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' 
>>> 
+0

그건 간단하지만, 더 부서지기 쉽습니다. 문자열이 ')'로 끝나지 않으면 나빠집니다. – x10

+1

@ x10 : ** more ** 취성이 아닙니다. 그것은 OP의 표현과 정확히 동일한 결과를 제공합니다. –

0

아니,이 충분합니다. 문자열을 받아들이고 형식을 반환하는 함수를 만들 수 있습니다.

또한 "Italy (BGN)"와 같은 잘못된 데이터에서 오류가 발생하므로 len (raw_text) -1을 사용하지 마십시오.

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

formatted_text = get_code(raw_text) 
+2

섀도 잉 내장은 매우 나쁜 습관입니다. –

3
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) 

는 (정규 표현식으로) 그것을하는 또 다른 방법이 될 것입니다. 물론

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

그것은 당신의 문자열의 형식을 확인하지 않습니다 : 당신은 그냥 사용 왜이 형식을 가지고 어떤 경우

+0

정규식은 확실하게이 경우에 들어갈 수있는 방법입니다. – Exelian

+0

더 일반적 일 수 있지만 입력 텍스트가 정확히 지정되어있는 것처럼 정확하지는 않습니다. Lookahead/Lookbehind를 피하면 도움이됩니다. 거의 사용하지 않아서 대부분의 사람들이 그들을 찾아야합니다. 're.search (r "\ ((. {3}) \)", 텍스트).group (1)' –

+0

@ 글렌 : 저는 매일 매일 lookahead/lookbehind를 사용한다고 말하고 싶습니다. 드문 사용법은 아닙니다. – tchrist

0

당신은 정규식

>>> import re 
>>> re.search('\((.{3})\)', 'Spain (BCN)').group(0) 
'BCN' 
1

깨갱 거리는 소리는 확실하다.

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

rstrip을 사용하여 후미 공백을 제거하십시오 (예 : trim). 그런 다음 4 개의 문자를 -1 문자로 되돌립니다.

1

문자열 접합은 [start:stop]이며 항상 두 번째 마지막 문자 인 len(raw_text)-1에 머물러 있습니다. 당신이 알고있는 경우 코드는 문자열의 끝에 계속하고, 당신이 말한대로 그 다음, 항상 세 자 길이 :

formatted_text=raw_text[-4:-1] 

문자열

의 끝에서 4를 시작하고 세 문자를 추출합니다
관련 문제