1

我只想用一个正则表达式从这个文本中获取名称:

 Name: 
 Paul Rao  

 Company: 
 Fix UR Gadget      

我应该只得到Paul Rao

我试过(?<=Name:)[\s\S]*\n但它不起作用,有什么想法吗?

零件名称:(换行符,空格...)实际名称(空格...换行符)将是相同的,但公司不会总是下面的文本。

有任何想法吗 ?

4

7 回答 7

0

这个怎么样:^Name:[^\S\n]$\n(.*)\n

于 2012-09-20T15:03:31.483 回答
0
        var match = Regex.Match(text, @"Name:[\s]*(.+)(?:$|\r)");
        var name = match.Groups[1].Value;
于 2012-09-21T07:23:36.657 回答
0

很好的尝试一下你的后视。你只是忘了那里有一条新线。

(?<=Name:\n)([^\n]*+)

现在第二组应该匹配它。

于 2012-09-20T15:06:38.240 回答
0
string text = @"
Name: 
Paul Rao  

Company: 
Fix UR Gadget 
";
Regex re = new Regex(@"Name:\s*\n(.+?)\s*\n");
Match m = re.Match(text);
if (m.Success)
{
    string name = m.Groups[1].Value;
}
于 2012-09-20T15:06:42.240 回答
0
(?<=Name:[\s\S\n]*)[a-zA-Z\s\-]*

(?<=Name:[\s\S]*)确保匹配前有单词“Name”、分号和任意数量的空白字符。(你甚至可能想用 切换*+因为你可以保证空格,但这会起作用)

[a-zA-Z\s\-]*匹配任意数量的字母、空格或连字符(因为连字符是名称的有效字符)。听说过 La-a (Luh-dash-uh) 的故事吗?甚至可能还有其他有效字符,我不知道。

于 2012-09-20T14:59:46.680 回答
0

有任何想法吗?不,因为它是关于正则表达式的问题;是的,因为如果没有正则表达式的危害人类罪,解析实际上会很有趣。

例如,看看这个网站上的教程(不确定这是否是你最好的选择;我自己没有在 .NET 上完成解析,但表面上看起来很棒)

http://www.quanttec.com/fparsec/

如果你愿意花一个小时左右的小时间投入,我保证你不会回头。

于 2012-09-20T15:00:10.370 回答
0

如果您使用组捕获,则可以避免使用lookbehind:

var result = Regex.Match(text, @"Name:[\r\n ]+([^\r\n]*)[\r\n ]+")

你的结果是result.Groups[1].Value.TrimEnd()

于 2012-09-20T15:12:46.253 回答