【问题标题】:Regex for named value of field after a colon冒号后字段命名值的正则表达式
【发布时间】:2012-11-06 17:10:16
【问题描述】:

使用 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;
                }   

【问题讨论】:

  • 你的文本的其余部分是什么样的?
  • 其余部分可能包含更多字段和答案
  • 只是字段和答案,用换行符分隔,还是还有更多?
  • 看看stackoverflow.com/questions/11088873/…,它也处理多行值。或者,tl;dr,Rubular 演示:rubular.com/r/8w3X6WGq4l
  • 感谢您的建议,是我对正则表达式和正则表达式的 c# 实现缺乏了解让我失望了!

标签: c# regex


【解决方案1】:

您要查找的正则表达式应类似于 (?<knownfieldname>[a-zA-Z]+)(\s+):(\s+)(?<value>[a-zA-Z]+)knownfieldname(\s+):(\s+)(?<value>[a-zA-Z]+)

当然,这假定 KnownFieldName 和 Value 都只是字母字符。如果可以输入数字,您可能还想将0-9 添加到范围中,或者如果除了空格之外的任何内容确实有效,您可以使用\S 通配符我猜。

经过编辑以包含可变数量的空格。此外,根据下面的 cmets,您可以考虑将 Derek Slager's awesome Regex testerthis simple Regex cheat sheet 都添加为书签。在这种情况下很有帮助。

【讨论】:

  • 我需要用一个实际的字符串替换 。这如何与正则表达式一起使用?
  • @KerSplosh 只是该正则表达式组的名称。把它放在你发布的内容中,它是match.Groups["knownfieldname"].Value;。但是,如果您只想将其设为正则表达式文字,则可以直接将其放入 - knownfieldname : (?<value>[a-zA-Z]+)。正则表达式中的大部分内容都是按字面意思解释的。
  • 对不起,我仍然没有得到任何匹配。请注意,冒号是已知字段后的可变空格数。
  • @KerSplosh 我更新了我的初始答案以包含可变数量的空格。和以前一样,如果需要,您可以只用静态 knownfieldname 替换第一组。
  • 太棒了。非常感谢您对我的耐心。
猜你喜欢
  • 2021-09-09
  • 1970-01-01
  • 1970-01-01
  • 2013-01-26
  • 1970-01-01
  • 2013-05-04
  • 1970-01-01
  • 2018-02-11
  • 1970-01-01
相关资源
最近更新 更多