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