所以基本上我有这个巨大的正则表达式模式,在它的中间某处是表达式(?:\s(\d\d\d)|(\d\d\d\d))
。在解析的这一部分,我想要捕获一个空格或4位数的3位数,但我不希望在整个事物周围使用括号来进行捕获(不是?:
做一些非捕获的东西)。我必须使用括号,以便“或”逻辑起作用(我认为)。
因此潜在的示例输入将是......
我尝试了(?:\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的答案仍然有效,因为我不需要使用“或”。但有没有办法做到这一点,你使用“或”?我想最终我需要这种能力。
答案 0 :(得分:1)
这应该有效:
(?:\s(\d{3,4}))
如果你没有在该子模式上做任何逻辑,如果你想要做的就是捕获数字,你甚至不需要围绕它的括号。以下模式:
\s(\d{3,4})
将直接在空格字符后面捕获三位或四位数字。