Python Regex는 즉시 그룹을 대체합니다.


106

정규식 구문을 사용하여 모든 그룹을 직접 대체하는 방법이 있습니까?

일반적인 방법 :

re.match(r"(?:aaa)(_bbb)", string1).group(1)

그러나 나는 다음과 같은 것을 성취하고 싶다.

re.match(r"(\d.*?)\s(\d.*?)", "(CALL_GROUP_1) (CALL_GROUP_2)")

방금 정규식이 캡처 한 그룹에서 새 문자열을 즉시 작성하고 싶습니다.

답변:


189

보세요 re.sub:

result = re.sub(r"(\d.*?)\s(\d.*?)", r"\1 \2", string1)

이것은 파이썬의 정규식 대체 (바꾸기) 함수입니다. 대체 문자열은 소위 역 참조 (백 슬래시, 그룹 번호)로 채워질 수 있으며 이는 그룹과 일치하는 것으로 대체됩니다. 그룹은 group(...)함수 와 동일하게 계산됩니다. 즉 1, 괄호를 열어 왼쪽에서 오른쪽으로 시작합니다.


4
문서보다 훨씬 더 명확합니다! 이 그룹이 어떻게 일하고 있는지 이해하지 못했습니다. 그들은 그러한 예를 추가해야합니다.
Y0da

그것은 처음부터 작동했습니다. 이것은 그것을 설명하는 꽤 명확한 방법입니다. 감사합니다. 하위 그룹이 어떤 (r(r))r((r)((r)r))상황 에서 적절한 방식으로 전화해야하는지 설명해 주 시겠습니까?
Rakshitha Muranga Rodrigo

1
@RakshithaMurangaRodrigo 그룹은 시작 위치를 기준으로 왼쪽에서 오른쪽으로 번호가 매겨집니다. 따라서 그룹 바로 앞에 각 그룹의 번호를 삽입하면 정렬 1(r2(r))r3(4(r)5(6(r)r))됩니다..
Martin Ender

@MartinEnder : 감사합니다!
Rakshitha Muranga Rodrigo

30

받아 들여지는 대답은 완벽합니다. 이 구문을 사용하여 그룹 참조를 더 잘 얻을 수 있다고 추가합니다.

r"\g<1> \g<2>"

대체 문자열. 이렇게하면 그룹 뒤에 숫자가 올 수있는 구문 제한을 피할 수 있습니다. 다시 말하지만, 이것은 모두 문서에 존재하며 새로운 것은 아니며 때로는 첫눈에 알아 내기가 어렵습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.