동일한 캡처 그룹 및 재사용 방법

동일한 캡처 그룹 및 재사용 방법

sed작동하는 다음 정규식이 있습니다 .

sed -i -E "s/customer_metadata[(]([0-9][0-9][0-9]*-([A-Z][a-z]-){0,1}[3-6]),([0-9][0-9][0-9]*-([A-Z][a-z]-){0,1}[3-6]),([0-9][0-9][0-9]*-([A-Z][a-z]-){0,1}[3-6])/\5,$NEW_DATA/g"  file  

하지만 그룹을 잡는 패턴이 반복되기 때문에 단순화할 수 있지 않을까 생각합니다. 또한 \5각 세트마다 하나씩 있기 때문에 두 번째 세트를 계산한다는 사실은 ()?오류가 발생하기 쉬운 것 같습니다.
이 정규식을 개선할 수 있는 방법이 있나요?

답변1

  • [0-9][0-9][0-9]*동일합니다 [0-9]{2,}.
  • ([A-Z][a-z]-){0,1}동일합니까?([A-Z][a-z]-)?
  • 일부 괄호를 제거하세요.

약식 표현:

customer_metadata[(][0-9]{2,}-([A-Z][a-z-]-)?[3-6],[0-9]{2,}-([A-Z][a-z]-)?[3-6],([0-9]{2,}-([A-Z][a-z]-)?[3-6])

그렇지 않으면

customer_metadata[^,]+,[^,]+,([0-9]{2,}-([A-Z][a-z]-)?[3-6])

이는 매우 주의 깊게 처음 두 쉼표 사이의 비트 형식이 올바른지 확인해야 하는지 여부에 따라 다릅니다.

그렇지 않으면

customer_metadata[^,]+,[^,]+,([^-]+-([^-]+-)?.)

세 번째 쉼표로 구분된 문자열이 something-something-character또는 형식 인지 확인합니다 something-character.

관련 정보