'마크에서 줄 끝까지 모든 것을 정규식으로 캡처 할 수있는 것은 무엇입니까?


122

하나의 '.

일부 줄에는 두 개의 따옴표가 있지만 a '와 줄 바꿈 의 첫 번째 인스턴스에서 모든 것을 가져와야합니다.

I AL01                  ' A-LINE                            '091398 GDK 33394178    
         402922 0831850 '                                   '091398 GDK 33394179    
I AL02                  ' A-LINE                            '091398 GDK 33394180    
         400722 0833118 '                                   '091398 GDK 33394181    
I A10A                  ' A-LINE 102                       '  53198 DJ  33394182    
         395335 0832203 '                                  '  53198 DJ  33394183    
I A10B                  ' A-LINE 102                       '  53198 DJ  3339418

답변:



90

적절한 정규식은 'char 다음에 문자열 / 줄 토큰의 끝으로 끝나는 임의의 수의 문자 (0 문자 포함)가옵니다.

'.*$

'char 의 모든 것을 캡처 하고 출력에는 포함하지 않으려면 다음을 사용합니다.

(?<=').*$

이것은 기본적으로 줄 끝까지 'char 다음에 오는 모든 문자를 제공합니다.

편집 :. *를 사용할 때 $는 암시 적이므로 엄격하게 요구되지 않으므로 패턴은 다음과 같습니다.

'.* 

기술적으로 정확하지만 나중에 코드 유지 관리를 위해 구체적이고 혼동을 피하는 것이 더 명확하므로 $를 사용합니다. 명확성이 의심 될 수있는 상황에서 암시 적 행동에 의존하는 것보다 명시 적 행동을 선언하는 것이 항상 더 낫다고 생각합니다.


1
$는 불필요합니다. 점은 정상적인 상황에서 줄 끝에서 멈 춥니 다.
Tomalak

7
불필요하지만 그가 원하는 일에 적합합니다. 나중에 '에서 줄 끝까지 모든 것을 예상하고 있음을 상기시켜줍니다.
gnarf

@balabaster : 나는 그것이 틀렸다고 말하지 않았습니다. ;-) 그것은 단지 각주였습니다.
Tomalak

@Tomalak : 당신이 어떤 식 으로든 틀렸다는 것을 암시하려는 것이 아니라, 내가 아닌 $를 사용하기로 선택한 이유를 설명하는 것뿐이었습니다. 지적 해주셔서 감사합니다.
BenAlabaster

항상 포함하는 대신 문제의 문자 뒤에 모든 것을 포함하는 방법을 포함하려면 +1합니다.
grizzasd

22
'.*$

작은 따옴표 ( ')로 시작 하여 줄 끝 .( *)까지 모든 문자 ( )를 0 번 이상 ( ) 일치 $시킵니다.


이 답변은 명령이 무엇인지이면에있는 논리를 훌륭하고 명확하게 분석하는 방법에 대한 훌륭한 예입니다!
Timmah

12

Windows (Notepad ++)에서 '. *를 시도하면 마지막 줄 끝까지 첫 번째'이후의 모든 항목과 일치합니다.

해당 줄 끝까지 모든 것을 캡처하려면 다음을 입력했습니다.

'.*?\n

이것은 '에서 해당 줄의 끝까지 모든 것을 캡처합니다.


6

귀하의 예에서는 다음 패턴을 사용합니다.

'([^\n]+)$

여러 줄 및 전역 옵션을 사용하여 모든 항목을 일치시킵니다.

일치 항목에 줄 바꿈을 포함하려면 다음을 사용할 수 있습니다.

'[^\n]+\n

그러나 줄 바꿈이 없으면 마지막 줄을 놓칠 수 있습니다.

한 줄의 경우 줄 바꿈과 일치 할 필요가 없으면 다음을 사용하고 싶습니다.

'[^$]+$

4

이것은 역 참조 1에서 '까지 모든 것을 캡처합니다. 역 참조 2에서는'뒤에있는 모든 것을 캡처합니다. 언어 (\ ')에 따라 어포 스트로피를 이스케이프해야 할 수도 있습니다.

/^([^']*)'?(.*)$/

빠른 수정 : 줄에 '가 없으면 역 참조 1은 여전히 ​​전체 줄을 잡아야합니다.

^ - start of string
([^']*) - capture any number of not ' characters
'? - match the ' 0 or 1 time
(.*) - capture any number of characters
$ - end of string

0

https://regex101.com/r/Jjc2xR/1

/(\w*\(Hex\): w*)(.*?)(?= |$)/gm

나는 이것이 작동한다고 확신합니다, 그것은 잘못 구조화 된 텍스트 여러 줄 벨로우에서 de hexa serial을 캡처 할 것입니다.

     Space Reservation: disabled
         Serial Number: wCVt1]IlvQWv
   Serial Number (Hex): 77435674315d496c76515776
               Comment: new comment

나는 정규식의 영원한 초보자이지만 이것을 설명하려고 노력할 것입니다.

(\ w * (Hex) : w *) : 문자열에 "Hex :"가 포함 된 줄에서 텍스트를 찾습니다.

(. *?) 이것은 두 번째 캡처 된 텍스트이며 다음의 모든 것을 의미합니다.

(? = | $) =와 | 사이의 공간 인 제한을 만듭니다.

따라서 두 번째 그룹을 사용하면


그게 문제가 아니죠?
Daniel E.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.