2013-09-07 2 views
0

문자열을 검색하고 길이가 n 자 이상이고 "hi"로 시작하고 "bye"로 끝나는 일치를 반환합니다.파이썬 : 정규식에서 변수 값 사용하기?

n = 10str = "himalayashibye"을 예로 들어 보겠습니다. (인사와 안녕 이미 n 개의 문자 중 다섯을 구성 때문에 나는 N에서 5를 뺀입니다.)

stringFinder = re.findall("hi.{n-5}*bye",str) 

그러나이 작동하지 않습니다

내가 할 싶습니다 .

제안 사항?

+2

복제 및 참조 용으로 죄송합니다. 이 질문에 대한 답변입니다. –

+0

구문이 올바르더라도 원하는 결과를 반환하지는 않습니다. 나는 "hi"와 "bye"의 인스턴스 대신에 전체 문자열을 리턴한다고 믿는다. 당신은 아마도're.match'를 원할 것입니다. – Cfreak

답변

0

문자열 형식 (위의 주석이 사용함)이 이미 사용 중입니다. 그래서, 계속 예 :

"hi.{%d}*bye" % (n - 5) 

그러나 결과이 여전히 n = 10으로-확실히하지 못했습니다 뭔가를 얻을 수 있습니다 :

"hi.{5}*bye" 

이 "꽤 괜찮 때문에 .{5}* 수단 아니다 5 (.{5}) 개의 그룹과 "0 번 이상 일치합니다 (그래서 0, 5, 10, 15 ..). 과 일치하지 않는 경계는 과 같은 단어가 많습니다. 1234567이 5 개 그룹의 배수가 아니기 때문에 일치하지 않습니다.

대신 .{5,}은 "적어도 5 회 이상 일치"하고 hi12345bye보다 긴 단어 만 허용합니다.

+1

OP는 적어도 5를 원합니다. 그래서 {{5,}} – Cfreak

+0

@Cfreak에 동의합니다. 다시 읽은 후에 동의합니다. 감사. – user2246674

0

원래 질문은 "적어도 n 개의 문자가 길지만"나는 대부분 user2246674에 동의합니다. 따라서 .{5,}을 사용해야합니다.

>>> import re 
>>> n = 10 
>>> pat = r"hi.{%d,}bye"%(n-5) 
>>> pat 
'hi.{5,}bye' 
>>> s = "himalayashibye" 
>>> re.findall(pat, s) 
['himalayashibye'] 
>>> 
관련 문제