정규식 라인에서 첫 번째 항목 만 일치 바꾸고 나머지 모든

나는 정규식에 완전히 익숙하지 않으며 도움을 주시면 감사하겠습니다.

작업은 간단합니다. 다음과 같은 레코드가 포함 된 CSV 파일이 있습니다.

12345,67890,12345,67890
12345,67890,12345,67890
12345,67890,12345,67890
12345,67890,12345,67890
12345,67890,12345,67890

첫 번째 쉼표를 공백으로 바꾸고 나머지 모든 쉼표를 그대로 유지하고 싶습니다. 첫 번째 쉼표와 만 일치하는 정규 표현식이 있습니까?

나는 이것을 시도했다 : ^.....,. 이것은 쉼표와 일치하지만 쉼표 앞에 오는 문자열의 전체 길이와도 일치하므로 공백 으로 바꾸려고하면 모든 숫자도 삭제됩니다.



답변

일치하는 패턴은 다음과 같습니다.

^([^,]+),

그 의미는

^        starts with
[^,]     anything but a comma
+        repeated one or more times (use * (means zero or more) if the first field can be empty)
([^,]+)  remember that part
,        followed by a comma

예를 들어 perl에서 전체 일치 및 교체는 다음과 같습니다.

s/^([^,]+),/\1 /

교체 부분은 일치하는 모든 것을 가져 와서 기억 한 첫 번째 블록으로 대체하고 공백을 추가합니다. 코마는 첫 번째 캡처 그룹에 없기 때문에 “삭제”됩니다.


답변

s/,/ /

g옵션 은 기본적으로 ( 옵션 없이 ) 첫 번째 일치 항목 만 대체합니다.


답변

첫 번째 숫자와 쉼표 만 일치해야합니다 ^(\d{5}),. 줄의 다른 모든 것을 고치려면 정규 표현식을 다음과 같이 변경하십시오.^(\d{5}),(.*)$


답변

더 우아한 솔루션은 지연 일치를 사용하는 것입니다.

s/^(.+?),/\1 /

첫 번째 쉼표 기호를 찾을 때까지 각 단계 에서 문자열 시작 ( ^)에서 끝 향해 문자 ( .+?) 씩 이동하여 문자를 그룹화합니다 . 첫 번째 쉼표와 함께이 그룹은 모두 그룹 ( \1) 및 공백 문자 로 바뀝니다 .


답변

TextPad는 항상 posix 표기법을 사용할 수 있지만 다른 대화 상자에서 설정을 변경해야합니다. 정규식에 TextPad의 기본 설정을 사용하려면 여는 괄호와 닫는 괄호를 “이스케이프”해야합니다.

각 줄의 시작 부분에서 5 자리 우편 번호 뒤에 공백을 바꿉니다.

^\([0-9]+\)[ ]

탭으로

\1\t

위와 같이 ^는 줄의 시작을 의미합니다.

\ (는 “이스케이프 처리 된 괄호”이며 첫 번째 검색 표현식의 시작, 즉 5 자리를 표시합니다.

[0-9] +는 하나 이상의 숫자 (5 자리 우편 번호가 아님)를 의미합니다.

\)는 첫 번째 검색 표현식의 끝을 나타내는 또 다른 “탈출 괄호”입니다.

[]는 공백 문자 일뿐입니다 (대괄호는 생략 할 수 있지만이 웹 페이지에서 아무도 볼 수는 없습니다 🙂

대체 표현에서

\ 1은 첫 번째 검색 표현식이며 위의 괄호 사이에있는 부분입니다 (하나 이상의 숫자)

\ t는 탭 문자입니다

따라서 찾기 및 바꾸기 명령은 하나 이상의 숫자를 찾은 다음 공백을 찾습니다. 그런 다음 모든 숫자를 동일한 자릿수 그룹과 탭으로 바꿉니다.

나는 단순히 “5 자리 뒤에 오는 공백”을 찾는 방법이 없다고 생각하므로 숫자를 건드리지 않고 공백을 바꿀 수 있습니다. 당신은해야 찾을 수 공간 (두 번째 문자열) 다음에 5 자리 (첫 번째 문자열). 그런 다음 중복되거나 성가신 것처럼 보이지만 ITSELF로 5 자리의 원래 문자열을 교체 한 다음 탭 (두 번째 문자열)을 교체하십시오.

이것을 아는 사람은 초보자가 이것에 대해 전혀 모른다는 것을 잊어 버립니다. 그래서 내 친구여, 내가 당신을 위해 철자를 쓰는 이유입니다.

Ed Poor Math Tutor 및 은퇴 한 컴퓨터 프로그래머 뉴욕시


답변

정규식의 첫 번째 항목 만 일치 시키려면 모든 플래그를 제거하십시오. 각 정규 표현식에는 다음과 같은 플래그가 제공되며 일반적으로 전역 플래그를 사용하는 것이 기본적으로 두 번 이상 발생합니다.

  • / g =이 플래그를 사용하면 검색하지 않고 모든 일치 항목을 찾습니다. 첫 번째 일치 항목 만 반환됩니다.
  • / i = 대소 문자 구분
  • / m = 멀티 라인 모드
  • / s = 모두. 개행 문자와 일치시키기 위해 \ n
  • / u = 유니 코드
  • / y = 고정 모드 (특정 위치에서 검색)

답변