正则表达式:此范围或该范围

时间:2016-05-09 11:37:15

标签: regex range

所以我正在尝试匹配某个邮政编码范围:

CB1 *,CB2 *,CB3 *,CB4 *,CB5 *,CB21 *,CB22 *,CB23 *,CB24 *,CB25 *

所以我尝试使用范围1-5或21-25。

这是我现在的正则表达式: ^[CBcb].([1-5]|[21-25]).+$ 我想确保邮政编码部分包含以下内容

[CB OR cb],[1-5 OR 21-25] and [Any combination]

有一个修补程序:https://regex101.com/r/aP9uG3/2

你如何指定两个范围?

4 个答案:

答案 0 :(得分:1)

由于模式是相同的,只有2可能会或可能不会发生,您可以这样说:

CB2?[1-5]      # add ^ and $ if required

如果要指定两个范围,可以始终使用括号common_pattern(pattern1|pattern2)对它们进行分组。

答案 1 :(得分:1)

d1 <- expand.grid(paste(z1,z2), z3) transform(read.table(text=as.character(d1$Var1), header=FALSE), V3= d1$Var2) 并使用i flag

第一个错误是您只匹配列表^cb2?[1-5].+$中的一个字符。第二个是中间有一个奇怪的[cbCB]。第三是你没有指定数字范围,而是指定一系列字符。 .不是字符,而是一系列字符。获得所有可能(整数)数字的字符范围是21。你想要的是一个可选的[0-9]*,后面是[1-5]范围内的一个字符。

你应该阅读正则表达式中的列表和范围是什么和意思,因为你误用了它们! Eeryone明显犯了错误,但这是你应该掌握的基础之一。

答案 2 :(得分:1)

你的正则表达式模式:

^[CBcb].([1-5]|[21-25]).+$

被解释为:

^[CBcb].([12345]|[2125]).+$

你需要:

^CB2?[1-5].+'

此处?表示前一个令牌的零或一个匹配,在这种情况下为2

答案 3 :(得分:1)

[]中包含字符使其成为一个字符类。这意味着匹配括号内的任何字符(除非它被否定)。它不是数字,而是字符。

如果您想匹配CBcb,请将其|CB|cb分开。甚至更好 - 让你的正则表达式独立。这在不同的正则表达式中以不同的方式完成。例如,在javascript中,将字符i附加到正则表达式:/cb/i

至于模式的其余部分,如果1-5和20-25实际上是你想要的,那么匹配1-5是用一个字符类(你现在熟悉的那样;),如[1-5]含义匹配字符1和5之间的ASCII范围内的任何字符。

使前面的2可选,你的正则表达式如下所示

CB2?[1-5]

它与您的邮政编码相匹配,没有终止$,它允许您[Any combination]

希望这有帮助。

此致