我试图从字符串中去掉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全部注入到我的原始正则表达式中。有人能告诉我吗?
答案 0 :(得分:3)
试一试。对我来说就像一个美女:
((?<=key[0-9]?=)[^\s]*(\s|$))+
(?<=regex)
是一个零宽度(非消费)的后视。这可确保该值前面有key[0-9]?=
。您可以调整[0-9]
以满足您的确切需求,但?
无论如何都会使该数字成为可选项。值部分匹配任何不空格:[^\s]
。它会一直消耗*
,并在找到空格或字符串结尾(\s|$)
时终止该值。
我开始查看您提供的数据blob,因为您实际上正在搜索并修改了表达式:
([^\s]+)=(.+?(?=([^\s]+=|$)))
非常适合您提供的标题数据(如果您要复制/粘贴到测试人员中,请记住删除硬回车)。
匹配
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]
与键不匹配(仅限值):
[^\s]+=(.+?(?=([^\s]+=|$)))
<强> RegEx Reference 强>
答案 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);
}