현재 정렬 된 문자 목록을 문자열로 변환하려고합니다. 이 문자열의 구분 기호는 앞뒤의 문자가 다른 경우 '-'여야하지만 이러한 문자가 같으면 '&'여야합니다.
예 : 목록 [ '1', '1', '2', '9', 'A', 'A', 'A', 'B', 'C']는 '1 & 1-2-9가되어야합니다. -A & A & A-B-C '.
이것은 Pandas DataFrame의 약 25 만 개의 목록에서 발생합니다. 모든 구분 기호 '-'로 문자열을 만들고 str.replace () 함수를 사용하여 대체하려고 생각하고 있지만 마지막 부분에서 멈춰 있습니다.
내 현재 코드의 단순화는 다음과 같습니다 ( 'sorted'열에는 위와 같이 정렬 된 문자 목록이 포함되어 있음).
df['joined'] = df['sorted'].str.join('-')
df['correct'] = df['joined'].str.replace(r"\-(.\-)\1{1,}?", xxxx, regex=True)
첫 번째 패턴과 동일한 부분을 수행 할 수있는 xxxx를 '.'로 대체 할 수있는 정규식 패턴이 있습니까? 원래 캐릭터인가? 또는 다른 솔루션이 있습니까 (예 : 긍정적 인 룩 비하인드 및 룩어 헤드 일치? 감사합니다!
다음과 같이 할 것입니다.
import re
chars = ['1', '1', '2', '9', 'A', 'A', 'A', 'B', 'C']
joined = '-'.join(chars)
result = re.sub(r'(.)-(?=\1)', r'\1&', joined)
print(result) # 1&1-2-9-A&A&A-B-C
설명 : 여기서는 -
이전과 동일한 문자가 뒤에 오는지 확인하면서 긍정적 인 미리보기를 사용했습니다 . 길이가 0 인 어설 션은 캡처하지 않으므로 -
서로 1 인 적절한 대체가 발생합니다.
A-A-A
일치 결과 :
(A-)(A-)A
r'(.)-\1'
패턴으로 사용하면 다음 과 같습니다.
(A-A)-A
따라서 두 번째는 -
변경되지 않고
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다