나는 어떻게해야하는지 아직 알지 못하는 특별한 사용 사례가 있습니다. field_name/field_length를 기준으로 문자열을 분석하고 싶습니다. 이를 위해 다음과 같은 정규 표현식을 정의합니다.명명 된 그룹 및 대체를 사용하여 파이썬 정규식으로 문자열 해설
'(?P<%s>.{%d})' % (field_name, field_length)
그리고 모든 필드에 대해이 작업을 반복합니다.
는 또한 각 필드의 오른쪽에있는 공백을 제거하는 정규식이 :
self.re_remove_spaces = re.compile(' *$')
이 같은 각 필드 얻을 수있는이 방법 : 나는이 처리를 수행 할 필요가
def dissect(self, str):
data = { }
m = self.compiled.search(str)
for field_name in self.fields:
value = m.group_name(field_name)
value = re.sub(self.re_remove_spaces, '', value)
data[field_name] = value
return data
을 수백만 개의 문자열이 있으므로 효율적이어야합니다.
나를 괴롭히는 이유는 compiled.search
대신 compiled.sub
을 사용하여 절개 + 공간 제거를 한 번 수행하는 것이 좋지만이 방법은 잘 모릅니다.
특히, 내 질문은 :
어떻게 파이썬 정규 표현식에에 명명 된 그룹과 결합 정규식 대체를 수행합니까?
''(? <%s>. % d) '% ...'는 (' .12)''와 (과) 비슷한 표현이 유효한 파이썬 정규 표현식이 아닙니다. –
interjay
죄송합니다. P와 {}이 (가) 빠졌습니다.나는 여전히 이것을 테스트하고 있으므로 더 많은 버그가있을 수 있습니다. – dangonfast