문자열의 패턴을 바꾸는 동안
특히 이름이 일치하는 그룹의 정수/긴 값이 필요합니다.Regex는 Python에서 대체합니다. 이름이 지정된 그룹을 정수로 변환합니다.
가지 경우 예 내가 뭘하려 :
status = {1:'foo', 23:'bar'}
re.sub(
'<status>(?P<id>\d+)',
status.get(int(r'\g<id>')), # ValueError: invalid literal for int() with base 10: '\\g<id>'
# status.get(int(r'\g<id>'.decode())), # ValueError: invalid literal for int() with base 10: '\\g<id>'
# status.get('%d' % r'\g<id>'), # %d format: a number is required, not str
'Tom ran: from <status>1 to <status>23')
일반 주조 원시 문자열 int(r'22')
하지만 위 작동하지 않습니다 잘 작동?
어떤 방식으로 작동하지 않습니까? 완전하고 정확한 예를 보여주십시오. http://sscce.org/ – Marcin
나는 위의 질문에서 시도한 모든 시도에서 제기 된 오류를 추가했습니다. 감사. – Pratyush
문제는 정규식 대체에 마법이 없다는 것입니다. r '\ g'과 같은 것은 문자 그대로 백 슬래시, 'g'및 두 개의 꺾쇠 괄호를 포함하는 일반 문자열입니다. re.sub() 메서드 안에는 이러한 문자열을 구문 분석하는 코드가 있습니다. 문자열을 re.sub()에 도달하기 전에 int()와 같은 다른 문자열에 전달하려고하면 int()는 백 슬래시와 g 및 꺾쇠 괄호로 리터럴 문자열을보고 no 아이디어를 만들어야합니다. 그래서 thg435가 보여 주듯이 람다 형식을 사용해야합니다. –