2012-11-06 47 views
1

使用c#我试图使用正则表达式来获取冒号后出现的一段文本的值。我知道字段名称,但有一个以下冒号处于可变位置。该值将在下一个空白处结束。正则表达式冒号后的字段名称值

因此:

KnownFieldName:值

然后我想的值放入一个组中。

我发现了一些类似的问题,但没有一个实际上指出我解决这个问题的方向。

这是一个更大的一段代码的一部分,但基本上在这里适合:

 foreach (var v in fieldsToParse) 
       { 
        var match = Regex.Match(line, v.pattern, RegexOptions.IgnorePatternWhitespace); 

        if (match.Success) 
         v.value = match.Groups[v.name].Value; 
       } 
+1

你的文字的其余部分是什么样的? –

+0

其余的可能包含更多的字段和答案 – KerSplosh

+0

这一切都只是字段和答案,由换行符分隔,还是有更多的? –

回答

0

你要找的应该是这样的(?<knownfieldname>[a-zA-Z]+)(\s+):(\s+)(?<value>[a-zA-Z]+)knownfieldname(\s+):(\s+)(?<value>[a-zA-Z]+)

这假设正则表达式KnownFieldName和值都只是字母字符,当然。如果数字可以进入它,您可能还想要将0-9添加到范围,或者如果有任何东西,但空白空间非常有效,那么您可以使用我猜的\S通配符。

编辑为包含可变数目的空格。另外,根据以下评论,您可能会考虑为Derek Slager's awesome Regex testerthis simple Regex cheat sheet添加书签。对于这种情况帮助很大。

+0

我需要用一个实际的字符串替换。这与正则表达式有什么关系? – KerSplosh

+0

@KerSplosh 只是该正则表达式组的名称。把它放在你发布的内容中,它会是'match.Groups [“knownfieldname”]。Value;'。但是,如果你想只是把它作为一个正则表达式,你可以把它放在longhand中:''knownfieldname:(? [a-zA-Z] +)'。正则表达式中的大部分内容都是从字面上解释的。 – tmesser

+0

对不起,但我仍然没有得到任何匹配。请注意冒号在已知字段后面是可变数量的空格。 – KerSplosh