2013-10-05 4 views
40

Ниже приводится содержание:Regex, чтобы получить слова после совпадающей строки

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.*$ матчи - Имя объекта

ответ

30

Следующая должно работать для вас:

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

Working example

Ваш желаемый матч будет в группе захвата 1.


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

Было бы похоже, но не допускать такие вещи, как «blah Object Name: blah», а также следить за тем, чтобы не захватывать следующую строку, если фактическое содержимое отсутствует после «Имя объекта:»

+2

Но я нужен результат матча, чтобы быть 'D: \ ApacheTomcat \ апач-TOMCAT-6.0.36 \ Logs \ localhost.2013-07-01.log' не в матче группы –

+0

@CasperNine, почему ? И какой язык вы используете? – smerny

+0

, потому что программа im, использующая захваты, соответствует только результату. Im использует инструмент управления журналом, называемый logstash. поместите ваше регулярное выражение на этот сайт http://regexpal.com/ и посмотрите .. он соответствует всей строке. –

3

Вы почти там. Используйте следующее регулярное выражение (с возможностью многострочного включена)

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

Полный матч будет

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

в то время захватили группу один будет содержать

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

Если вы хотите напрямую захватить путь к файлу

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

Я хочу, чтобы полное совпадение было ' D: \ ApacheTomcat \ apache-tomcat-6.0.36 \ logs \ localhost.2013-07-01.log' я не могу это сделать? –

+1

@CasperNine Да, вы можете. Обновлено регулярное выражение. –

+0

@hwnd да это правильный. Но как это работает? что, если нужно совместить слова, которые находятся в строке 'Security ID:' –

-1

Вот быстрый скрипт perl, чтобы получить то, что вам нужно. Нуждается в некотором пробеле.

#!/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"; 
    } 
} 
+0

regex not python –

28

Но мне нужен результат матча будет ... не в матче группы ...

За то, что вы пытаетесь сделать, это должно работать. \K сбрасывает исходную точку матча.

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

Вы можете сделать то же самое для получения своих совпадений Security ID.

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

Благодарим вас за ответы и комментарии. У меня + 1ед. –

+8

О, сладкий. '\ K' +1 мат. Это «ответ». –

+0

'\ K' не работает в javascript, любые другие решения? – Jim

0

Это может работать для вас в зависимости от того, какой язык вы используете

(?<=Object Name:).* 

Это положительное утверждение с просмотром назад. Более подробная информация может быть найдена here

Это не будет работать с java-скриптом. В вашем комментарии я прочитал, что вы используете его для logstash. Если вы используете разбор GROK для logstash, это сработает.Вы можете проверить себя здесь

https://grokdebug.herokuapp.com/

enter image description here

-1

Это питон решение.

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'] 
>>> 
Смежные вопросы