2015-12-22 76 views
-2

我需要比較以下字符串。我的問題是在這兩個字符串的URL會有所不同,每次e.g:比較C#兩個字符串包含隨機URL

www.google.com
http://www.google.com
google.co.uk!

因爲URL不匹配,所以包含無法匹配字符串。

String1 = "This is my string http://www.google.co.uk and that was my url" 
String2 = "this is my string google.gr and that was my url" 

所以我基本上要比較的串減去URL的內容,每個字符串可以包含不同的文字每次所以每次都不行尋找URL在同一地點。

我已經廣泛搜查這裏回答這個問題,但我無法找到一個有效的解決方案。

在此先感謝

+0

你能詳細說明你認爲的一個匹配嗎? 「http:// www.google.co.uk」與「google.gr」匹配嗎? – Rob

+0

如果在一個字符串中的所有文本字符串兩個文本匹配,則其視爲匹配。 的String1 = 「**這是我的字符串** ** http://www.google.co.uk,那是我的網址**」 String2的=「**這是我的字符串** google.gr **,這是我的網址**「 – johnsmith6

+0

可能的重複[只從域名獲得URL?](http:// stackoverflow。com/questions/2154167/get-just-the-domain-name-from-a-url) –

回答

1

使用正則表達式:

 Regex regex = new Regex(@"\s((?:\S+)\.(?:\S+))"); 

     string string1 = "This is my string http://www.google.co.uk and that was my url."; 
     string string2 = "this is my string google.gr and that was my url."; 

     var string1WithoutURI = regex.Replace(string1, ""); // Output: "This is my string and that was my url." 
     var string2WithoutURI = regex.Replace(string2, ""); // Output: "this is my string and that was my url." 

     // Regex.Replace(string1, @"\s((?:\S+)\.(?:\S+))", ""); // This can be used too to avoid having to declare the regex. 

     if (string1WithoutURI == string2WithoutURI) 
     { 
      // Do what you want with the two strings 
     } 

解釋正則表達式\s((?:\S+)\.(?:\S+))

\s將匹配任何空白字符

2.((?:\S+)\.(?:\S+))將匹配的URL,直到下一次空格字符

2.1。(?:\S+)將匹配任何非空白字符而不捕獲組(與?:)

2.2。\.將匹配字符「。」,因爲它將始終存在於一個url中

2.3。(?:\S+))再次,將無需再次捕獲組(與匹配任何非空白字符?:)來獲取點之後的所有內容。

這應該是訣竅...

+1

使用'[\ s]''與將'\ s'自身放在一起,與'\ .'相同。有一些情況(特別是'\ b'),這不是真的 - '[\ b]'匹配退格字符,而不是字邊界。壞習慣不好。 – Corey

+0

@Corey謝謝你的提醒,我已經更新了答案。 –

+0

非常感謝!此代碼爲我工作。 – johnsmith6

4

使用正則表達式來刪除鏈接:

 String string1 = "This is my string http://www.google.co.uk and that was my url"; 
     String string2 = "this is my string http://google.gr and that was"; 

     Regex rxp = new Regex(@"http://[^\s]*"); 
     String clean1 = rxp.Replace(string1, ""); 
     String clean2 = rxp.Replace(string2, ""); 

現在你可以用clean2比較clean1。上面的OFC regexp只是一個例子,它只是用「http://」去掉url的注視。根據您的真實數據,您可能需要更復雜的東西。

+0

感謝您的回覆。這是行不通的,因爲URL可以是「google.com」而沒有「http://」,它也可以使用任何TLD。 – johnsmith6

+0

那麼你可以嘗試模式[^ \ s] + \。[^ \ s] +,它應該匹配內部至少有一個點的所有字符串部分,並以空格開頭和結尾。但是你需要檢查它與真實用例,因爲這次可能太寬泛了。 – Vir

+0

這個答案不符合問題的要求! – johnsmith6