正则expression式来匹配string后的单词

以下是内容:

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+ 

你快到了。 使用以下正则expression式(启用多行选项)

 \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 

如果要直接捕捉文件path使用

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

这里有一个快速的perl脚本来获得你所需要的。 需要一些空白的chomping。

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

这可能会取决于您使用的是哪种语言

 (?<=Object Name:).* 

这是一个积极的向后看断言。 更多信息可以在这里find

它不会与Java脚本工作。 在你的评论中,我读到你正在使用logstash。 如果您正在使用GROK分析logstash,那么它将工作。 你可以在这里validation自己

https://grokdebug.herokuapp.com/

在这里输入图像说明

这是python解决scheme。

 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'] >>>