匹配后匹配行开头返回文本

问题描述:

我试图让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

使用.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

对不起Champ,我想每个标签总共有三个正则表达式,第一个和最后一个电子邮件。返回后的文本: – 2013-03-13 15:33:44

我真的不知道你的脚本语言(正则表达式的支持可以区别)。但是,这样的事情应该工作:

/^.*?:(.*?)$/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