我需要有关正则表达式的帮助。
我们有以下字符串:
$ VAR = [1550181700,'“ xyz(gmail.com)”','嗨,请稍候,主机名:kmkkmk.abc.com,工作名称:dat-inh-ndw-q9n580_prd106.f,工作名称:dat-inh-rdm-q9n717_jdapfrdly.b,职位名称:dat-inh-rdm-q9n717_jdapfrdly.b,谨记,DSG团队']
在上面的字符串中,我需要捕获“ Job Name:”之后和下一个COMMA(,)之前的任何内容 这意味着我必须获取包含以下内容的字符串列表: [dat-inh-ndw-q9n580_prd106.f,dat-inh-rdm-q9n717_jdapfrdly.b,dat-inh-rdm-q9n717_jdapfrdly.b]
注意:我们不知道上面的字符串中“作业名称:”可能会出现多少次。
答案 0 :(得分:0)
尝试使用正则表达式:Job Name: (?<job>[^,]*)
答案 1 :(得分:0)
(?>Job Name: )([^,]*)
捕获以下3个字符串:
dat-inh-ndw-q9n580_prd106.f
dat-inh-rdm-q9n717_jdapfrdly.b
dat-inh-rdm-q9n717_jdapfrdly.b
答案 2 :(得分:0)
嗯,这取决于您的基础架构。基本上,您的Regex看起来会像这样(假定使用.NET语法):
arr_delay == -15
这将捕获字符串“ JobName:”,后跟任意数量的空格。然后,我们有一个捕获组,可以捕获任意数量的非逗号字符([^,] *)。使用此功能,您可以启动匹配过程,该过程将为您提供第一个捕获组中所需的所有字符串。
这就是基础结构的来源。您是否需要.NET上下文,JavaScript,PHP或其他内容?这些命令将根据使用的技术而有所不同。
更新1:(Perl代码)
"Job Name:\\s*([^,]*)"
这将为您提供@jobNames数组中所需的所有名称。但是,如果仅需要将正则表达式用作函数的参数,则可能需要对其进行一些更改。
更新2 :(使用后置断言)
您可能实际上正在寻找的是所谓的零宽度后向声明。它定义要匹配的模式,但不包括在结果中。然后,正则表达式将如下所示:
$s = "$VAR = [1550181700, '\"xyz (gmail.com)\" ', 'Hi Team,Please ON HOLD,HostName: kmkkmk.abc.com,Job Name: dat-inh-ndw-q9n580_prd106.f,Job Name: dat-inh-rdm-q9n717_jdapfrdly.b,Job Name: dat-inh-rdm-q9n717_jdapfrdly.b,regards,DSG Team']";
@jobNames = [];
while($s =~ /Job Name:\s*([^,]*)/gi) {
push @jobNames, $1;
}
/(?<=Job Name: )[^,]*/
构造告诉正则表达式仅匹配以下模式(如果在其前面加上括号中定义的内容,在您的情况下为“作业名称:”)。但是,这不应包含在结果中。因此,只有模式的其余部分才是结果的一部分。
注意:您可能已经注意到,我在冒号后用常规空格替换了(?<=...)
构造。这是因为使用\ s *构造时,我的在线perl游乐场给我一个“在正则表达式中未实现的可变长度后视”错误。但是,它可能会在您实施perl时起作用。如果确定的话,在冒号后面总会有一个空格,您可以继续使用单个空格。