2012-07-23 49 views
1

在Java中,我可以簡單地使用正則表達式提取部分代碼或文本,但在C#中,我不知道我該如何做到這一點。 例如:在c中使用正則表達式提取文本的部分#

Pattern p = Pattern.compile("(.*?)b(.*?)d(.*?)", Pattern.DOTALL|Pattern.MULTILINE); 
Matcher matcher = p.matcher("abcde"); 
System.out.println(matcher.group(1)); //c 

我發現很多關於正則表達式的教程在C#中,但我發現沒有辦法做一些簡單的像這樣。但它必須處理各種各樣的文本,數字,符號等,以便我可以使用它來提取部分HTML代碼。

+3

[_ 「使我可以使用正則表達式例如,以提取的HTML代碼部分」 _ ](http://stackoverflow.com/a/1732454/284240) – 2012-07-23 22:47:52

+0

@TimSchmelter哈哈打敗我吧! – 2012-07-23 22:48:17

+0

這段文字看起來很可怕,我知道正則表達式不應該用於HTML,但它只是一個例子。 – MWeller 2012-07-23 22:53:15

回答

1

首先。你在java中的代碼不能按原樣工作。

正確的代碼(測試):

Pattern p = Pattern.compile("(.*?)b(.*?)d(.*?)", Pattern.DOTALL|Pattern.MULTILINE); 
Matcher matcher = p.matcher("abcde"); 
if (matcher.find()) // Without this test: [Exception in thread "main" java.lang.IllegalStateException: No match found] 
    System.out.println(matcher.group(2)); //c  <--2 instead of 1 

等效於C#(測試):

Regex r = new Regex("(.*?)b(.*?)d(.*?)", RegexOptions.Singleline | RegexOptions.Multiline); 
Match matcher = r.Match("abcde"); 
Console.WriteLine(matcher.Groups[2]); //c 
+1

謝謝你,那正是我正在尋找的。我不確定這是否爲零,謝謝你解決這個問題。 – MWeller 2012-07-23 23:26:31

+1

除此之外,您可以使用命名組'new Regex(「(?。*?)b(?。*)d(?。*?)」...「,然後是」matcher.Groups [「wibble 「]'等 – 2012-07-23 23:44:57

0
Regex rx = new Regex("(.*?)b(.*?)d(.*?)"); 
Match match = rx.Match("abcde"); 
string found = match.Value; 
+1

我已經有過這樣的事情,但它返回「abcd」。它返回正則表達式的最後一個匹配,但是我想要一個帶有通配符的文本的字段或列表,在這種情況下,第一個通配符爲「a」,第二個通配符爲「c」,依此類推。 – MWeller 2012-07-23 23:21:59