2015-01-20 50 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