求一些C#RegEx帮助
我正在尝试创建一个RegEx表达式,它将成功解析以下行:
"57" "testing123" 82 16 # 13 26 blah blah
我想要的是能够识别行中的数字。 目前,我正在使用的是:
[0-9]+
解析得很好。 然而,如果数字是引号,如果“57”是或者像“testing123”那样,它变得棘手,我不希望它匹配。
除此之外,哈希符号后面的任何内容(’#“),我都不想在哈希符号之后匹配任何东西。
所以在这个例子中,我应该得到的匹配是“82”和“16”。 没有别的东西可以匹配。
任何有关这方面的帮助将不胜感激。
您应该更容易构建3个不同的正则表达式,然后创建组合它们的逻辑:
- 检查字符串是否有#,并忽略其后的所有内容。
- 检查“\ d +”的所有匹配项,并忽略所有匹配项
- 检查剩下的所有内容,是否匹配[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;
缺少这种模式主要是不带引号的字符串标记,例如这可能会增加一些复杂性,这取决于我们希望它如何工作。