>

두 특정 문자열 사이의 여러 줄에서 마지막 쉼표를 바꿀 수있는 정규식을 만들려고합니다.

샘플 텍스트 :

BEGIN_MESSAGE_MAP(SomeForm, BaseForm)
    ON_COMMAND(CID_ButtonAction, OnButtonAction)
    ON_NOTIFY_EX(CID_Notify, 0, OnNotify)
END_MESSAGE_MAP()

원하는 출력 :

BEGIN_MESSAGE_MAP(SomeForm, BaseForm)
    ON_COMMAND(CID_ButtonAction, &ThisClass::OnButtonAction)
    ON_NOTIFY_EX(CID_Notify, 0, &ThisClass::OnNotify)
END_MESSAGE_MAP()

마지막 쉼표를 한 줄에 바꾸는 것만으로도 충분합니다 :

(,)([^,]*?)$ 찾기

(?1,&ThisClass\:\:\2) 로 교체 .

나는 또한 BEGIN_MESSAGE_MAP 사이의 모든 것과 일치하는 정규 표현식을 만들 수있었습니다.  그리고 END_MESSAGE_MAP .

(?<=BEGIN_MESSAGE_MAP)(.*\R)*(?=END_MESSAGE_MAP)

질문은-이 두 문자열 사이에서만 교체 할 수 있도록이 둘을 어떻게 합치나요?

  • 답변 # 1

    이 정규식을 사용하여 검색 할 수 있습니다 :

    (?:^\h*BEGIN_MESSAGE_MAP|(?!\A)\G)(?:.*\R)+?.*\K(,\h*)(?=(?:.*\R)+^END_MESSAGE_MAP)
    
    

    그리고 다음과 같이 바꾸십시오 :

    $1&ThisClass::
    
    

    RegEx 데모

    RegEx 세부 정보 :

    \G  이전 일치의 끝 또는 첫 번째 일치의 문자열 시작 위치를 지정합니다. 네거티브 lookahead (?!\A) 를 배치함으로써  우리는 \G 를 확인  문자열이 시작될 때 일치하지 않습니다.

    \K  보고 된 일치의 시작 지점을 재설정합니다.

    결국 (?=...) 에서 Lookahead 조건  우리가 END_MESSAGE_MAP 를 가지고 있는지 확인하는 것입니다  우리보다 앞서.

관련 자료

  • 이전 powerbi desktop - PowerQuery의 사용자 정의 함수에 대한 매개 변수 옵션
  • 다음 pandas - 파이썬 테이블 조인