development

문자열 일치 후 단어를 가져 오는 정규식

big-blog 2020. 12. 12. 12:06
반응형

문자열 일치 후 단어를 가져 오는 정규식


다음은 내용입니다.

Subject:
    Security ID:        S-1-5-21-3368353891-1012177287-890106238-22451
    Account Name:       ChamaraKer
    Account Domain:     JIC
    Logon ID:       0x1fffb

Object:
    Object Server:  Security
    Object Type:    File
    Object Name:    D:\ApacheTomcat\apache-tomcat-6.0.36\logs\localhost.2013-07-01.log
    Handle ID:  0x11dc

Object Name:그 줄에 있는 단어 뒤에 나오는 단어 를 캡처해야합니다 . 어느입니다 D:\ApacheTomcat\apache-tomcat-6.0.36\logs\localhost.2013-07-01.log. 누군가 나를 도울 수 있기를 바랍니다.

^.*\bObject Name\b.*$ 일치-개체 이름


다음이 효과가있을 것입니다.

[\n\r].*Object Name:\s*([^\n\r]*)

작업 예

원하는 경기는 캡처 그룹 1에 있습니다.


[\n\r][ \t]*Object Name:[ \t]*([^\n\r]*)

유사하지만 "blah Object Name : blah"와 같은 것을 허용하지 않으며 "Object Name :"뒤에 실제 내용이없는 경우 다음 행을 캡처하지 않도록하십시오.


하지만 매치 결과는 매치 그룹이 아니어야합니다 ...

당신이하려는 일에 대해 이것은 작동합니다. \K경기의 시작 지점을 재설정합니다.

\bObject Name:\s+\K\S+

Security ID성냥 을 얻기 위해 똑같이 할 수 있습니다 .

\bSecurity ID:\s+\K\S+

거의 완료되었습니다. 다음 정규식 사용 (여러 줄 옵션 사용)

\bObject Name:\s+(.*)$

완전한 경기는

Object Name:   D:\ApacheTomcat\apache-tomcat-6.0.36\logs\localhost.2013-07-01.log

캡처 된 그룹 1에는

D:\ApacheTomcat\apache-tomcat-6.0.36\logs\localhost.2013-07-01.log

파일 경로를 직접 캡처하려면

(?m)(?<=\bObject Name:).*$

사용하는 언어에 따라이 문제가 해결 될 수 있습니다.

(?<=Object Name:).*

긍정적 인 룩 비하인드 주장입니다. 더 많은 정보는 여기 에서 찾을 수 있습니다 .

그래도 자바 스크립트에서는 작동하지 않습니다. 귀하의 의견에서 나는 당신이 logstash에 그것을 사용하고 있다고 읽었습니다. logstash에 대해 GROK 구문 분석을 사용하는 경우 작동합니다. 여기에서 자신을 확인할 수 있습니다.

https://grokdebug.herokuapp.com/

여기에 이미지 설명 입력


필요한 것을 얻을 수있는 빠른 펄 스크립트가 있습니다. 약간의 공백이 필요합니다.

#!/bin/perl

$sample = <<END;
Subject:
  Security ID:        S-1-5-21-3368353891-1012177287-890106238-22451
  Account Name:       ChamaraKer
  Account Domain:     JIC
  Logon ID:       0x1fffb

Object:
  Object Server:  Security
  Object Type:    File
  Object Name:    D:\\ApacheTomcat\\apache-tomcat-6.0.36\\logs\\localhost.2013- 07-01.log
  Handle ID:  0x11dc
END

my @sample_lines = split /\n/, $sample;
my $path;

foreach my $line (@sample_lines) {
  ($path) = $line =~ m/Object Name:([^s]+)/g;
  if($path) {
    print $path . "\n";
  }
}

이것은 파이썬 솔루션입니다.

import re

line ="""Subject:
    Security ID:        S-1-5-21-3368353891-1012177287-890106238-22451
    Account Name:       ChamaraKer
    Account Domain:     JIC
    Logon ID:       0x1fffb

Object:
    Object Server:  Security
    Object Type:    File
    Object Name:    D:\ApacheTomcat\apache-tomcat-6.0.36\logs\localhost.2013-07-01.log
    Handle ID:  0x11dc"""



regex = (r'Object Name:\s+(.*)')
match1= re.findall(regex,line)
print (match1)

*** Remote Interpreter Reinitialized  ***
>>> 
['D:\\ApacheTomcat\x07pache-tomcat-6.0.36\\logs\\localhost.2013-07-01.log']
>>> 

참고 URL : https://stackoverflow.com/questions/19193251/regex-to-get-the-words-after-matching-string

반응형