2013-03-13 58 views
0

我試圖讓REGEX在First name:Last name:,Email:之後提取文本並且不包含標籤。匹配後匹配行開頭返回文本

這是我在標籤之間的文字。

<MyText> 
First name: Chris 
Last name: Jones 
Email: [email protected] 
</myText> 

我一直在玩這樣的事情:/(Last name:).*?但這並不行。有誰知道如何解決這個問題?

+0

正在使用哪種正則表達式的方言? – MattW 2013-03-13 15:30:05

+0

感謝編輯Wouter! – 2013-03-13 15:30:25

+0

@mattw我正在使用C# – 2013-03-13 15:30:48

回答

1

使用.NET正則表達式,你可以使用正向後斷言:

new Regex(@"(?<=Last name:).*"); 

根據上下文,你可能要但請小心 - JavaScript正則表達式引擎不支持lookbehind斷言,因此您不能在ASP.NET RegularExpressionValidator中使用此客戶端。

+0

啊這是一個! 「(?<=姓氏:)。*」我不需要?在最後# – 2013-03-13 15:35:45

+0

謝謝你這個工作的冠軍! – 2013-03-13 15:55:03

0

試試這個正則表達式:

/^.*?: (.*)$/ 
+0

對不起Champ,我想每個標籤總共有三個正則表達式,第一個和最後一個電子郵件。返回後的文本: – 2013-03-13 15:33:44

1

我真的不知道你的腳本語言(正則表達式的支持可以區別)。但是,這樣的事情應該工作:

/^.*?:(.*?)$/m 

一些交代:

m修飾符(//m)一個正則表達式表示^$比賽的開始和結束每行,而不是開始和一個結束串。

.*?:部分匹配Last name:,First name:,等。並且因爲它不在括號(())之間,所以不會捕獲它。

(.*?)部分匹配冒號後的所有內容(:),並且由於$放在它之後,它將匹配所有內容,直到行尾。它位於括號之間,意味着它將被捕獲。


爲了回答您的編輯,使用此:

/^First name: (.*?)$/m 
/^Last name: (.*?)$/m 
/^Email: (.*?)$/m 
+0

這不起作用。我希望每個標籤總共有三個正則表達式 – 2013-03-13 15:31:55

+0

@ChrisJones編輯了正則表達式來做到這一點 – 2013-03-13 15:35:54

+0

再次感謝您的詳細回覆。 – 2013-03-13 15:55:20