我正在尝试创建一个RegEx表达式,它将成功解析以下行:
"57" "testing123" 82 16 # 13 26 blah blah
我想要的是识别行中的数字。目前,我正在使用的是:
[0-9]+
解析得很好。然而,如果数字是引号,如果数字是“57”或者像“testing123”那样,它变得棘手,我不希望它匹配。
除此之外,哈希符号后面的任何内容('#“),我都不想在哈希符号之后匹配任何内容。
所以在这个例子中,我应该得到的匹配是“82”和“16”。没有别的东西可以匹配。
对此有任何帮助将不胜感激。
答案 0 :(得分:1)
您应该更容易构建3个不同的正则表达式,然后创建组合它们的逻辑:
答案 1 :(得分:0)
.Net正则表达式可以很容易地解析这个字符串。在注释之前,以下模式应匹配所有内容:
\A # Start of the string
(?>
(?<Quoted> # A quoted string
"" # Open quotes
[^""\\]* # non quotes or backslashes
(?:\\.[^""\\]*)* # but allow escaped characters
"" # Close quotes
)
|
(?<Number> # A number
\d+ # some digits
)
|
\s+ # Whitespace separator
)*
如果您还想匹配评论,请添加:
(?<Comment>
\# .*
)?
\z
您可以使用“数字”组的所有捕获信息在一个Match
中获取您的数字:
Match parsed = Regex.Match(s, pattern, RegexOptions.IgnorePatternWhitespace);
CaptureCollection numbers = parsed.Groups["Number"].Captures;
缺少此模式主要是不带引号的字符串标记,例如4 8 this 15that
,这会增加一些复杂性,具体取决于我们希望它如何工作。