如何在正则表达式中使用带有“或”字符的非捕获组

时间:2012-06-26 18:28:20

标签: c# regex parsing

所以基本上我有这个巨大的正则表达式模式,在它的中间某处是表达式(?:\s(\d\d\d)|(\d\d\d\d))。在解析的这一部分,我想要捕获一个空格或4位数的3位数,但我不希望在整个事物周围使用括号来进行捕获(不是?:做一些非捕获的东西)。我必须使用括号,以便“或”逻辑起作用(我认为)。

因此潜在的示例输入将是......

  • input1 = giantexpression
  • 之后的123个字符
  • input2 = giantexpression1234blahblahblah

我尝试了(?:\s(\d\d\d)|(\d\d\d\d))并且至少在我有4位数的情况下它给了额外的捕获。我这样做是对的,还是我搞砸了?

编辑:

详细介绍......这是我正在使用的当前正则表达式。

pattern = @".?(\d{1,2})\s*(\w{2}).?.?.?(?:\s(\d\d\d)|(\d\d\d\d)).*"

在开始时我需要做一些解析。我认为Sean Johnson的答案仍然有效,因为我不需要使用“或”。但有没有办法做到这一点,你使用“或”?我想最终我需要这种能力。

1 个答案:

答案 0 :(得分:1)

这应该有效:

(?:\s(\d{3,4}))

如果你没有在该子模式上做任何逻辑,如果你想要做的就是捕获数字,你甚至不需要围绕它的括号。以下模式:

\s(\d{3,4})

将直接在空格字符后面捕获三位或四位数字。