2012-03-19 2 views
0

파일 이름이 10.10.10.17_super-micro-100-13.txt인데 _. 사이의 모든 파일을 추출해야합니다. 예를 들어,이 경우 반환 할 것입니다. super-micro-100-13Python : RegEx assistance

작업을 수행하려면 Python 정규식이 필요합니다. 내가 re.compile('\_(.*)\.)을하면, 내가 원하는 바가 아니고 _super-micro-100-13.이됩니다. 누구든지이 사건에서 올바른 정규식이 될 것이라고에 대한 약간의 빛을 던질 수 있습니까?

감사합니다, 닐

답변

1

당신은 lookbehind 및 내다을 사용할 수 있습니다. 또한 리터럴 점과 일치 시키려면 끝에 .을 이스케이프 처리해야합니다. 내가 정규식 있다고 생각

regex = re.compile(r'_(.*)\.') 
print regex.search('10.10.10.17_super-micro-100-13.txt').group(1) 
# super-micro-100-13 
1

이 시도 :

import re 
name = '10.10.10.17_super-micro-100-13.txt' 
regex = re.compile(r'.+_(.+)\.txt') 
regex.match(name).group(1) 
> 'super-micro-100-13' 
2

을 당신이 함께 몇 가지 문자열 방법을 더 읽을 수있다 던지고, 정규식을 사용할 필요가 없습니다 결정합니다. 당신은 실제로 당신이 원하는 부분을 일치되도록

file_name = "10.10.10.17_super-micro-100-13.txt" 
print file_name.split("_")[1].split(".")[0] 
1

:

regex = re.compile(r'(?<=_).*(?=\.)') 

다른 방법으로, 현재 정규식을 사용하고 경기에서 첫 번째 캡처 그룹을 뽑을 수 : 여기

는 사용할 수있는 정규식 조금 지나친 것입니다. 다음과 같이 " 찾기"기능을 사용할 수 있습니다.

def extract_info(s): 
    underscore = s.find('_') 
    dot = s.find('_', underscore) //you only want a dot after the underscore 
    return s[underscore:dot]