>

아래 문자열을 마스킹하기 위해 정규 표현식을 작성하려고합니다. 아래 예.

입력

A1../D//FASDFAS--DFASD//.F

출력 (첫 5 자리와 마지막 2 자리 영숫자 건너 뛰기)

A1../D//FA***********D//.F

아래 정규식을 사용하려고합니다. ([A-Za-z0-9] {5}) (. *) (. {2})

도움을 주시면 감사하겠습니다.

  • 답변 # 1

    단일 정규식으로 그렇게하려면

    text = text.replaceAll("(\\G(?!^|(?:[0-9A-Za-z][^0-9A-Za-z]*){2}$)|^(?:[^0-9A-Za-z]*[0-9A-Za-z]){5}).", "$1*");
    
    

    또는 POSIX 문자 클래스 Alnum 사용 :

    text = text.replaceAll("(\\G(?!^|(?:\\p{Alnum}\\P{Alnum}*){2}$)|^(?:\\P{Alnum}*\\p{Alnum}){5}).", "$1*");
    
    

    Java 데모 및 정규식 데모를 참조하십시오. 단일 코드 단위가 아닌 코드 포인트를 별표로 바꾸려면 . 를 바꾸십시오.   \P{M}\p{M}*+ 와 함께  (와이즈 와이즈) ).

    "\\P{M}\\p{M}*+" 를 만들려면  줄 바꿈 문자 일치, . 추가  패턴의 시작 부분에.

    세부 정보

    (?s)  -

    (\G(?!^|(?:[0-9A-Za-z][^0-9A-Za-z]*){2}$)|^(?:[^0-9A-Za-z]*[0-9A-Za-z]){5})  -성공적으로 일치 한 후 영숫자 문자가 2 번 나오고 영숫자 문자가 아닌 0 개 이상의 문자가 나오지 않는 위치

    \G(?!^|(?:[0-9A-Za-z][^0-9A-Za-z]*){2}$)  -또는

    |  -문자열의 시작, 0 개 이상의 영숫자가 아닌 문자 다음에 영숫자 문자

    ^(?:[^0-9A-Za-z]*[0-9A-Za-z]){5}  -줄 바꿈 문자 이외의 코드 단위 ( . 를 사용하는 경우)  -모든 코드 포인트).

    \P{M}\p{M}*+

관련 자료

  • 이전 emacs - 파이썬 emacs 인터프리터가 루프 입력을 일시 중지하지 않습니다
  • 다음 python 3.x - 아마존에서 상품 제목을 추출 할 수 없습니다