寻求一些c# RegEx帮助
本文关键字:RegEx 帮助 | 更新日期: 2023-09-27 18:01:32
我正在尝试创建一个RegEx表达式,将成功解析以下行:
"57" "testing123" 82 16 # 13 26 blah blah
我想要的是能够识别行中的数字。目前,我使用的是:
[0-9]+
可以很好地解析。然而,它变得棘手的地方是,如果数字在引号中,就像"57"或"testing123"一样,我不希望它匹配。
除此之外,在散列符号("#")之后的任何内容,我都不想匹配散列符号之后的任何内容。
所以在这个例子中,我应该得到的匹配是"82"answers"16"。
构建3个不同的正则表达式,然后创建组合它们的逻辑应该更容易:
- 检查字符串是否有#,忽略后面的内容。
- 检查所有匹配的"'d+",并忽略它们
- 检查所有剩下的内容,是否匹配[0-9]+
。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
中获取您的数字,使用所有捕获的"Number"组:
Match parsed = Regex.Match(s, pattern, RegexOptions.IgnorePatternWhitespace);
CaptureCollection numbers = parsed.Groups["Number"].Captures;
该模式中缺少的主要是未加引号的字符串令牌,例如4 8 this 15that
,这可能会增加一些复杂性,这取决于我们希望它如何工作。