寻求一些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"。

寻求一些c# RegEx帮助

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

  1. 检查字符串是否有#,忽略后面的内容。
  2. 检查所有匹配的"'d+",并忽略它们
  3. 检查所有剩下的内容,是否匹配[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,这可能会增加一些复杂性,这取决于我们希望它如何工作。