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

时间:2013-03-13 15:28:10

标签: c# regex

我正在尝试制作一个REGEX,以便在First name:Last name:Email:之后提取文字而不包含标签。

这是标签之间的文字。

<MyText>
First name: Chris
Last name: Jones
Email: cj@dsf.com
</myText>

我一直在玩这样的事情:/(Last name:).*?但这不起作用。有谁知道如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

我实际上并不知道您的脚本语言(REGEX支持可能有所不同)。但是这样的事情应该有效:

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

一些解释:

使用m修饰符(//m)的正则表达式表示^$匹配每行的开头和结尾,而不是字符串的开头和结尾。

.*?:部分与Last name:First name:等匹配。因为它不在括号(())之间,所以不会捕获它。

(.*?)部分匹配冒号后面的所有内容(:),并且因为$放在它后面,它将匹配所有内容直到行尾。它位于括号之间,意味着它将被捕获。


要回答您的编辑,请使用以下命令:

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

答案 1 :(得分:1)

使用.NET Regex,您可以使用正向lookbehind断言:

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

根据上下文,您可能必须小心,但JavaScript正则表达式引擎不支持lookbehind断言,因此您不能在ASP.NET RegularExpressionValidator中使用此客户端。

答案 2 :(得分:0)

试试这个正则表达式:

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