파이썬 문자열은 정규식으로 문자를 대체합니다 [중복]

Nov 27 2020

내가 이해하지 못하는 정규식 문제가 발생했습니다. 문자열 사이에있는 쉼표를 세미콜론으로 바꾸려고하는데 작동하지 않습니다. 아래에 샘플 문자열이 있습니다. 정규식 비 캡처 그룹에서 "시퀀스"뒤의 내용을 제외한 모든 내용을 대체하는 정규식을 설정하여 끝에있는 쉼표를 비 캡처 그룹의 유일한 하위 문자열 인 세미콜론으로 대체해야합니다. 그러나 작동하지 않습니다. (? : sequence :)를 비 캡처 그룹으로 넣을 때만 문자열을 보존하는 것 같습니다. \ d를 추가하자마자 전체를 대체합니다. 이유를 잘 모르겠습니다.

내 진짜 문제에서는 콜론으로 표시되고 세미콜론으로 끝나는 콘텐츠 태그가 심각합니다. 태그 시퀀스에는 세미콜론 대신 잘못된 쉼표가 있습니다. 대체해야하지만 모든 것을 변경하지 않고 그대로 둡니다. 따라서 솔루션은 sequence : 2에서 sequence : 2로 변경해야합니다.

a_string = "tag1: content1 is this tag2: 0.1 amount; tag3: july 2020; sequence:2, tag4: content4"
new_string = re.sub(r"(?:sequence\:)(?:\d)(\,)", ";", a_string)

new_string

작동해야하는 다른 솔루션 을 살펴 보았지만 그렇지 않았습니다. 도움을 주시면 감사하겠습니다.이 질문을 더 명확하게 할 수 있으면 알려주세요.

답변

1 TimBiegeleisen Nov 27 2020 at 06:17

여기에 긍정적 인 부정적인 룩 비하인드를 사용하려고했을 것입니다.

a_string = "tag1: content1 is this tag2: 0.1 amount; tag3: july 2020; sequence:2, tag4: content4"
new_string = re.sub(r"(?<=\bsequence:\d)(\,)", ";", a_string)

print(new_string)

이것은 다음을 인쇄합니다.

tag1: content1 is this tag2: 0.1 amount; tag3: july 2020; sequence:2; tag4: content4

그건 그렇고, sequence대상 쉼표 앞 의 텍스트를 직접 일치 시키려면 괜찮지 만 캡처 그룹을 사용하여 교체하십시오.

a_string = "tag1: content1 is this tag2: 0.1 amount; tag3: july 2020; sequence:2, tag4: content4"
new_string = re.sub(r"(sequence:\d)(\,)", "\\1;", a_string)
print(new_string)   # same as above