2015-01-20 75 views
1

我已经写了下面的代码,以减少我在每一行正则表达式VB.net我应该组?

s = Regex.Replace(s, "(a\/users\/\d*).*\(.*", "$1") 

的字符串开始为这个信息:

/A /用户/ 15 /徽章PARAMS%5Bnotifications%图5D%5Bcount%5D = 5 HTTP/1.1" 200 143 “的Mozilla/5.0(兼容; MSIE 9.0; Windows NT的6.1;三叉戟/ 5.0)”

林试图去

/a/users/15 /(compatible; MSIE 9.0; Windows NT 6.1;三叉戟/ 5.0)”

我要去远矣如果有人可以帮助我将不胜感激


当我试试这个:?

S = Regex.Replace(S, “(A /用户/ \ d *)。(\黑莓。)。*”, “$ 1 $ 2”)”

排序以下行

/a/users/80021/messages.json?params[page]=1 & params [per_page] = 10 & params [set_actions] = true HTTP/1.1“200 13063”BlackBerry9320/7.1.0.398 Profile/MIDP-2.1 Configuration /CLDC-1.1厂商ID/603 tibbr/3.6.6.1" 一百五十七万四千零七十零分之一

它不工作,它似乎没有了/一个/后的用户识别//80021

再次感谢您的帮助,谢谢

,即时通讯非常了解它。

我将在HttpUtility AA外观以及

+2

该字符串是一个查询字符串 - 为什么不使用简单的查询字符串解析器,如'HttpUtility.ParseQueryString'? – 2015-01-20 18:37:27

+0

再次查看时,您有一个URL和一个用户代理字符串连接起来。我现在看到的上述评论可能没有那么有用。你想解析IIS日志或什么? – 2015-01-20 19:15:28

+0

如果该行来自日志文件,则可能是由制表符分隔的部分。在这种情况下,您可以通过使用String.Split来简化问题,然后将正则表达式应用于相关的部分。 – 2015-01-22 21:43:00

回答

2

你不应该逃避斜线和匹配第三组,以及:

(a/users/\d*/).\((.*)\).* 

您还需要结束正则表达式与.*使确保剩余的字符被删除。

或者:

s = Regex.Replace(s, "(a/users/\d*/).*(\(.*\)).*", "$1 $2") 

DEMO

但@Cory认为:最好使用库实现的算法,如HttpUtility,因为它们按照所有规范设计,不太可能包含错误。

编辑:关于你的第二个正则表达式,有一个错误:

s = Regex.Replace(s, "(a\/users\/\d*).*(\Blackberry\.*).*","$1 $2") 

你不要逃避括号,但B.,正确的正则表达式可能是:

s = Regex.Replace(s, "(a\/users\/\d*/).*(Blackberry.*).*","$1 $2") 
+0

嗨,感谢您的帮助我已经玩了几天,现在和你一起工作过,但当我修改它为不同的行它不能得到它的工作 – vbvirg20 2015-01-22 21:23:01

+0

当我试试这个: 's =正则表达式。替换(s,“(a \/users \/\ d *)。*(\ Blackberry \。*)。*”,“$ 1 $ 2”)' 要排序以下行 /a/users/80021 /messages.json?params[page]=1¶ms[per_page]=10¶ms[set_actions]=true HTTP/1.1“200 13063”BlackBerry9320/7.1.0.398 Profile/MIDP-2.1 Configuration/CLDC-1.1 VendorID/603 tibbr/3.6。 6.1“1/1574070 它不起作用它似乎无法识别/之后/ a /用户/ 80021 再次感谢您的帮助,即时了解它的g不动产资产信托。 我会看看HttpUtility以及 – vbvirg20 2015-01-22 21:29:22

+0

@ vbvirg20:看到修改后的答案,这是否工作? – 2015-01-22 22:32:36