0

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

因此,潜在的示例输入将类似于...

  • input1= Giantexpression 后面还有 123 个字符
  • 输入2=巨人表达式1234blahblahblah

我试过(?:\s(\d\d\d)|(\d\d\d\d))了,至少在我有 4 位数字的情况下,它提供了额外的捕获。那么我这样做是对的还是我在某个地方搞砸了?

编辑:

更详细地说……这是我正在使用的当前正则表达式。

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

一开始我需要做一些解析。我认为肖恩约翰逊的答案仍然有效,因为我不需要使用“或”。但是有没有办法使用“或”来做到这一点?我认为最终我会需要这种能力。

4

1 回答 1

1

这应该有效:

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

如果您没有对该子模式执行任何逻辑,那么如果您只想捕获数字,那么您甚至不需要围绕它的括号。以下模式:

\s(\d{3,4})

将捕获紧跟在空格字符之后的三或四位数字。

于 2012-06-26T18:30:27.743 回答