似乎无法用这个正则表达式来指出它是什么?

时间:2010-12-16 14:29:07

标签: c# asp.net regex

我试图从字符串中去掉keyvalue对。例如使用:

key=cat key2=dog 

我使用表达式:

([^=])([\w-\s]*)\s

这给了我:

猫 狗

但实际上,要搜索的字符串可能包含其他非字母字符,如下所示:

192.168.20.31 Url=/flash/56553550_hi.mp4 Log=SESSIONSTART 
[16/Dec/2010:13:44:17 +0000] flash/56553550_hi.mp4 0 192.168.20.31 1 
[16/Dec/2010:13:44:17 +0000] 0 0 0 [0 No Error] 
[0 No Error [rtmp://helix.pete.videolibraryserver.com/flash/56553550_hi.mp4] 

我需要能够从中获取URL。但是我不确定如何将所有字符类型的catch全部注入到我的原始正则表达式中。有人能告诉我吗?

3 个答案:

答案 0 :(得分:3)

试一试。对我来说就像一个美女:

((?<=key[0-9]?=)[^\s]*(\s|$))+

(?<=regex)是一个零宽度(非消费)的后视。这可确保该值前面有key[0-9]?=。您可以调整[0-9]以满足您的确切需求,但?无论如何都会使该数字成为可选项。值部分匹配任何空格:[^\s]。它会一直消耗*,并在找到空格或字符串结尾(\s|$)时终止该值。


更新

我开始查看您提供的数据blob,因为您实际上正在搜索并修改了表达式:

([^\s]+)=(.+?(?=([^\s]+=|$)))

非常适合您提供的标题数据(如果您要复制/粘贴到测试人员中,请记住删除硬回车)。

匹配

Url/flash/56553550_hi.mp4

LogSESSIONSTART [16/Dec/2010:13:44:17 +0000] flash/56553550_hi.mp4 0 192.168.20.31 1 [16/Dec/2010:13:44:17 +0000] 0 0 0 [0 No Error] [0 No Error [rtmp://helix.pete.videolibraryserver.com/flash/56553550_hi.mp4]

与键不匹配(仅限值):

[^\s]+=(.+?(?=([^\s]+=|$)))

<强> RegEx Reference

RegEx Tester

答案 1 :(得分:1)

尝试此操作,捕获Url=后的非空格字符:

\bUrl=(\S*)

或者,如果您想要更通用的东西来匹配所有键/值对,请尝试:

\b(\S*)=(\S*)

答案 2 :(得分:1)

假设您的Url值仅允许:字母数字,'。'和'_';这个正则表达式应该提取url的值。

地址=((\ W?| / |)*)

提取值的代码是:


Regex regex = new Regex(@"Url=(?(\w|/|\.)*)");
MatchCollection matchCollection = regex.Matches(inputString);

foreach(Match match in matchCollection)
{
    Console.WriteLine(match.Groups["url"].Value);
}