2015-01-26 83 views
0

我收到了以下URL字符串日誌。日誌包含數百萬條記錄。剝離URL的前綴

www.example.com/p1?q=k 
example.com/p1?q=k 
http://example.com/p1?q=k 
https://example.com/p1?q=k 
http://www.example.com/p1?q=k 

我用C#Uri類,但它引發excepition類型 的「example.com/p1?q=K」格式我想知道是否存在用於處理這種通常/標準接受的方法不同類型的URL來獲取websitename &的相對URL。

PS:我可以脫掉的http:// & https://開頭使用正則表達式或字符串對比,但很想知道,如果有任何優雅的解決方案

+0

'如果有一個通用/標準接受的方法'是的是'Uri' :) – EZI 2015-01-26 22:29:37

+0

是的,但它會拋出一個例外的日誌類型 「example.com/p1?q=k」 – 2015-01-26 22:36:10

+0

附加http: //,https://或www。如果它不存在,如果它發生在Uri實例的構建過程中 – Bauss 2015-01-26 22:38:27

回答

1

如果你與你現有的例子嘗試它將無法正常工作。但是你可以用這個玩,做在需要的地方,這意味着你將需要創建一些變量來存儲一些追加代碼http://, https://, and www.

System.Uri uriPre = new Uri ("http://www.example.com/p1?q=k"); 
string uriString = uriPre.Host + uriPre.PathAndQuery; 
uriString = uriString.Replace("www.", ""); 

產生

"example.com/p1?q=k" 
  • 編碼你要搞清楚,因爲只有你會知道什麼時候使用上我提供

Alexei Levenkov答案在這裏展開的例子不同的協議基礎的其餘部分是一個例子你可以用它來嘗試創建一個新的Uri。

Uri tempValue; 
var uriPre = new Uri(string.Empty, UriKind.Relative); 
if (Uri.TryCreate("example.com/p1?q=k", UriKind.Relative, out tempValue)) 
{ 
    // do something or retrun tempValue; 
} 
+0

我假設你知道'= new Uri(string.Empty,UriKind.Relative);'由於'out'完全沒用...... – 2015-01-27 15:55:15

+0

是的我知道我只是在展示一個例子,因爲我不知道是什麼'OP'打算在條件檢查中做..我實際上會發布'var uriPre = new Uri(string.Empty,UriKind。相對);'是不必要的,我只是作爲一個例子來顯示'tempValue'被正確地返回 – MethodMan 2015-01-27 15:56:44

0

Uri它是專門用來對付尤里斯

var noSchemaRelativeUri = new Uri("example.com/foo", UriKind.Relative); 

無論是UriBuilderUri(Uri base, Uri relative)類可用於構造絕對URI。

要選擇相對和aboslute之間,你可以使用Uri.TryCreate

注意。 「www.example.com」和「example.com」嚴格來說是不相關的域名,將一個域名轉換爲另一個域名並不能保證始終生成註冊的域名(實際上大多數域名都註冊並在兩者之間做某種重定向)。

+0

我更新了我的答案,提供了'OP'的例子,基於你使用'Uri.TryCreate'的建議 – MethodMan 2015-01-27 15:48:52