求一些C#RegEx帮助

我正在尝试创建一个RegEx表达式,它将成功解析以下行:

"57" "testing123" 82 16 # 13 26 blah blah 

我想要的是能够识别行中的数字。 目前,我正在使用的是:

 [0-9]+ 

解析得很好。 然而,如果数字是引号,如果“57”是或者像“testing123”那样,它变得棘手,我不希望它匹配。

除此之外,哈希符号后面的任何内容(’#“),我都不想在哈希符号之后匹配任何东西。

所以在这个例子中,我应该得到的匹配是“82”和“16”。 没有别的东西可以匹配。

任何有关这方面的帮助将不胜感激。

您应该更容易构建3个不同的正则表达式,然后创建组合它们的逻辑:

  1. 检查字符串是否有#,并忽略其后的所有内容。
  2. 检查“\ d +”的所有匹配项,并忽略所有匹配项
  3. 检查剩下的所有内容,是否匹配[0-9] +

.Net正则表达式可以很容易地解析这个字符串。 在评论之前,以下模式应匹配所有内容:

 \A # Start of the string (?> (? # A quoted string "" # Open quotes [^""\\]* # non quotes or backslashes (?:\\.[^""\\]*)* # but allow escaped characters "" # Close quotes ) | (? # A number \d+ # some digits ) | \s+ # Whitespace separator )* 

如果您还想匹配评论,请添加:

 (? \# .* )? \z 

您可以使用“数字”组的所有捕获在一次Match获取您的数字:

 Match parsed = Regex.Match(s, pattern, RegexOptions.IgnorePatternWhitespace); CaptureCollection numbers = parsed.Groups["Number"].Captures; 

缺少这种模式主要是不带引号的字符串标记,例如这可能会增加一些复杂性,这取决于我们希望它如何工作。