귀하의 패턴 : (Only in ?P<folder_path>\w+:?P<filename>\w+)
그것에 몇 가지 결함을 가지고있다.
?P
구조는 괄호로 둘러싸인 식 안에있는 첫 번째 비트로만 유효하므로 이것을 필요로합니다.
(Only in (?P<folder_path>\w+):(?P<filename>\w+))
\w
문자 클래스는 문자와 밑줄로만 사용됩니다. 예를 들어, /
또는 .
과 일치하지 않습니다. 요구 사항과보다 밀접하게 조화되는 다른 문자 클래스를 사용해야합니다. 사실, 우리는 단지 .
, 거의 모든 캐릭터의 클래스를 사용할 수 있습니다
(Only in (?P<folder_path>.+):(?P<filename>.+))
콜론은 예를 들어 텍스트에서 후 공간이 마련되어 있습니다. 일치해야합니다 :
(Only in (?P<folder_path>.+): (?P<filename>.+))
가장 바깥 쪽 괄호는 필요하지 않습니다. 그들은 잘못이 아니며 단지 필요하지 않습니다.
Only in (?P<folder_path>.+): (?P<filename>.+)
정규 표현식 엔진 호출과 별도로 정규 표현식을 제공하는 것이 편리한 경우가 많습니다.상기
regex = r'Only in (?P<folder_path>.+): (?P<filename>.+)'
... # several lines later
m = re.match(regex, "Only in Api_git/Api/folder A: new.txt")
를 프로그래머를 순수하다 :이 용이하게 예를 들면, 새로운 변수를 생성함으로써 달성된다는 저장되지 않으며 시간이나 메모리 공간을 낭비하는 둘. 그러나 정규 표현식에 관련된 시간을 절약 할 수있는 기술이 있습니다 : 을 컴파일하십시오.
이 코드 세그먼트 고려 :
regex = r'Only in (?P<folder_path>.+): (?P<filename>.+)'
for line in input_file:
m = re.match(regex, line)
...
루프의 각 반복를 들어, 정규 표현식 엔진은 정규 표현식을 해석하고 line
변수에 적용해야합니다. re
모듈을 사용하면 해석을 응용 프로그램과 분리 할 수 있습니다. 우리는 여러 번 한 번 해석하지만, 적용 할 수 있습니다
regex = re.compile(r'Only in (?P<folder_path>.+): (?P<filename>.+)')
for line in input_file:
m = re.match(regex, line)
...
지금, 당신의 원래 프로그램은 다음과 같이한다 :
regex = re.compile(r'Only in (?P<folder_path>.+): (?P<filename>.+)')
m = re.match(regex, "Only in Api_git/Api/folder A: new.txt")
print m.group('folder_path')
print m.group('filename')
그러나, 나는 정규 표현식을 설명하는 주석을 사용하는 팬입니다. 일반적인 정리를 포함하여 내 버전은 다음과 같습니다 : 정말 입력의 제한에 따라
import re
regex = re.compile(r'''(?x) # Verbose
Only\ in\ # Literal match
(?P<folder_path>.+) # match longest sequence of anything, and put in 'folder_path'
:\ # Literal match
(?P<filename>.+) # match longest sequence of anything and put in 'filename'
''')
with open('diff.out') as input_file:
for line in input_file:
m = re.match(regex, line)
if m:
print m.group('folder_path')
print m.group('filename')
':'(으)로 분할 할 수 있습니까? – Dalorzo