2012-06-06 8 views
0

파일 및 파일을 포함하는 경로의 라이브러리와 일치시키는 정규식을 작성하려고합니다. 파일의 모든 라이브러리는 형식입니다.경로와 일치하는 파이썬 정규식

text = "mylib|C://desktop//baseicmylib.lib 
     randlib|C://desktop//randlib.lib" 

그래서 내가 실수를하고 어디는 몇 가지 중 하나가 나를 도울 수

str = "mylib" 
pattern = r'%s\\|.*lib'%str 
mypath = re.findall(pattern,text) 

을 썼다 MYLIB

찾으려는 경우.

답변

3

을 필요로하지거야?

text = '''mylib|C://desktop//baseicmylib.lib 
    randlib|C://desktop//randlib.lib''' 

libs = dict(line.split('|', 1) for line in 
    (s.strip() for s in text.split('\n'))) 

결과 :

{'randlib': 'C://desktop//randlib.lib', 
    'mylib': 'C://desktop//baseicmylib.lib'} 
1

파이프가 문제를 일으키기 전에 //. 잘 나를 위해 다음 작품 :

text = "argh|foo.lib" 
str = "argh" 
pattern = r"%s\|.*lib" %str 
print re.findall(pattern,text) 

['argh', '|hehe.lib'] 

단일 \이 (비 원시 문자열을 두 번 \) 충분 원시 문자열에서 탈출을 원 하셨다면, 탈출에 사용 // 밤은

+0

'|' 탈출해야합니다. 귀하의 경우에는 잘못된 출력을 제공합니다. lib와 일치하는 경로와 일치하거나 연산자 – mousey

+0

이 있으면 백 슬래시는 이스케이프 문자이고 슬래시는 아닙니다. – cjh

+0

고마워. 그 어리석은 실수 – mousey

1

당신의 패턴을 약간 조정할 필요 : 그것은 어쩌면 더 정규식

text = '''mylib|C://desktop//baseicmylib.lib 
randlib|C://desktop//randlib.lib''' 
str = 'mylib' 
pattern = "%s\|(.+?\.lib)" %str 
print re.findall(pattern,text) 
0
>>>pattern = r'%s.*?lib'%str 
>>>re.findall(pattern, text) 
['mylib|C://desktop//baseicmylib'] 

그것은

* ?, + ?, 정규식에 no-greedy 이상형 ??

'*', '+''?' 한정자는 모두 가능한 한 많은 텍스트와 일치합니다. 때로는이 동작이 바람직하지 않습니다. RE <.*>이 'title'과 일치하면 ''뿐만 아니라 전체 문자열과 일치합니다. '?'추가 예선자가 비 탐욕 스럽거나 최소한의 방식으로 경기를 진행하게 만든다. 가능한 한 적은 수의 문자가 일치합니다. . * 사용? 이전 표현식에서 ''와 만 일치합니다.

관련 문제