2011-08-23 6 views
0

나는이 같은 문자열이있는 경우 :Regex를 사용하여 간단한 문자열을 매칭 하시겠습니까?

*select 65* description 

는 어떻게 별표와 파이썬에 정규식를 사용하여 수 후 비트를 추출 할 수 있습니까? 위의 문자열에서 select65을 얻을 수있는 무언가가 필요합니다.

그들 모두는이 규칙을 따릅니다 :

*[lowercase specifier] [integer]* description 

답변

4

당신이 정규 표현식을 사용할 수 있습니다

^\*([a-z]+)\s+([0-9]+)\* 

파이썬에서, 당신은 the re module로 정규 표현식을 일치시킬 수 있습니다. 따라서 : 다음

import re 

my_string = """*select 65* description""" 
match = re.match(r"^\*([a-z]+)\s+([0-9]+)\*", my_string) 
specifier = match.group(1) 
integer = int(match.group(2)) 
+1

주) "소문자 지정자"와 "정수"섹션 사이. 일치가 엄격해야한다면 '\ s +'부분을 바꾸고 실제 공백 문자를 넣으십시오. –

1
import re 

및 중

m = re.match(r"^\*([a-z]+)\s+([0-9]+)\*\s+(.*)", "*select 65* description") 
print m.groups() 

또는

r = re.compile(r"^\*([a-z]+)\s+([0-9]+)\*\s+(.*)") 
m = r.match("*select 65* description") 
print m.groups() 

당신이 만들고 싶어 일치의 수에 따라 달라집니다. 정규 표현식은 다중 실행에 더 적합한 형식으로 컴파일되기 때문에 전자는 하나 또는 일부 일치에 더 적합합니다.

+0

아, 죄송합니다, 너무 많이. icktoofay가 썼 듯이, 당신이 설명에 관심이 없기 때문에 사용하는 정규 표현식은'r "^ \ * ([a-z] +) \ s + ([0-9] +) \ *" "가 될 것입니다. – glglgl

1

파이썬의 정규식 라이브러리는 강력하지만 경량 문제에 대한 분할()를 사용하여 개인적으로 좋아 해요 : 지정된 정규 표현식은 하나 개 이상의 공백 문자 (공백, 탭과 일치 것

>>> s = "*select 65* description" 
>>> s.split('*') 
['', 'select 65', ' description'] 
>>> s.split('*')[1].split() 
['select', '65'] 
+2

아마, "소문자 지정자"가 실제로 소문자인지 "정수"부분이 실제로 정수인지는 확인하지 않으므로 여분의 오류 검사를 수행해야합니다. –

+0

정규식을 사용하지 않는 경우 +1. 다른 간단한 해결책이 있다면 regex를 사용하지 마십시오. – Dominik

관련 문제