匹配连续 n(字母数字)的正则表达式
Regex to match consecutive n (alpha numeric)
我正在尝试匹配字符串中连续的 n 个(字母数字)字符。
其中 n = 3
i7g172w2n YES (it has 3 consecutive number)
adab172cd NO (it has 4 consecutive alpha even though it has 3 consecutive number)
aaa172afa YES (it has 3 consecutive number and 3 consecutive alpha)
ab21cd172 YES
abc21a3d3 YES
谁能帮帮我。
这是我的正则表达式:(\D(\d{3})\D)|\d([a-z]{3})\d
不工作。
虽然几乎可以肯定有针对此问题的纯正则表达式解决方案,但这将是一个涉及前瞻断言的难以理解的混乱局面。如果你用代码而不是正则表达式来做一些工作,问题就会变得更加简单(显示Python):
import re
def consecutive(s, n):
matches = re.findall("\d+|[a-z]+", s)
longest = max(map(len, matches))
return longest == n
for test in ["i7g172w2n", "adab172cd", "aaa172afa", "ab21cd172", "abc21a3d3", "12a3b3b3b"]:
print test, consecutive(test, 3)
基本上,它验证最长的连续数字或字母序列恰好是要求的数字,不多也不少。输出:
i7g172w2n True
adab172cd False
aaa172afa True
ab21cd172 True
abc21a3d3 True
12a3b3b3b False
尝试使用以下正则表达式。
正则表达式: ^(?:(?:\d{0,3}[a-z]{1,3}\d{1,3})+|(?:[a-z]{0,3}\d{1,3}[a-z]{1,3})+)$
解释:基本上我所做的是匹配以下模式。
(?:\d{0,3}[a-z]{1,3}\d{1,3})+
- (
0-3 Digit
1-3 Alphabets
1-3 Digits
) <-
不止一次.
(?:[a-z]{0,3}\d{1,3}[a-z]{1,3})+
- (
0-3 Alphabets
1-3 Digits
1-3 Alphabets
) <-
不止一次.
由于两者交替出现,因此将匹配其中一个模式。
对于字符串 i7g172w2n
子匹配将是 i
-7
-g
-172
-w
-2
-n
。符合规范。
对于字符串 adsb172cd
,子匹配将为 adsb
-172
-cd
。由于 adsb
超过长度 3。因此不会被匹配。
与 abc2p7373
类似,7373
超过长度 3。
我正在尝试匹配字符串中连续的 n 个(字母数字)字符。
其中 n = 3
i7g172w2n YES (it has 3 consecutive number)
adab172cd NO (it has 4 consecutive alpha even though it has 3 consecutive number)
aaa172afa YES (it has 3 consecutive number and 3 consecutive alpha)
ab21cd172 YES
abc21a3d3 YES
谁能帮帮我。
这是我的正则表达式:(\D(\d{3})\D)|\d([a-z]{3})\d
不工作。
虽然几乎可以肯定有针对此问题的纯正则表达式解决方案,但这将是一个涉及前瞻断言的难以理解的混乱局面。如果你用代码而不是正则表达式来做一些工作,问题就会变得更加简单(显示Python):
import re
def consecutive(s, n):
matches = re.findall("\d+|[a-z]+", s)
longest = max(map(len, matches))
return longest == n
for test in ["i7g172w2n", "adab172cd", "aaa172afa", "ab21cd172", "abc21a3d3", "12a3b3b3b"]:
print test, consecutive(test, 3)
基本上,它验证最长的连续数字或字母序列恰好是要求的数字,不多也不少。输出:
i7g172w2n True
adab172cd False
aaa172afa True
ab21cd172 True
abc21a3d3 True
12a3b3b3b False
尝试使用以下正则表达式。
正则表达式: ^(?:(?:\d{0,3}[a-z]{1,3}\d{1,3})+|(?:[a-z]{0,3}\d{1,3}[a-z]{1,3})+)$
解释:基本上我所做的是匹配以下模式。
(?:\d{0,3}[a-z]{1,3}\d{1,3})+
- (
0-3 Digit
1-3 Alphabets
1-3 Digits
)<-
不止一次.
- (
(?:[a-z]{0,3}\d{1,3}[a-z]{1,3})+
- (
0-3 Alphabets
1-3 Digits
1-3 Alphabets
)<-
不止一次.
- (
由于两者交替出现,因此将匹配其中一个模式。
对于字符串 i7g172w2n
子匹配将是 i
-7
-g
-172
-w
-2
-n
。符合规范。
对于字符串 adsb172cd
,子匹配将为 adsb
-172
-cd
。由于 adsb
超过长度 3。因此不会被匹配。
与 abc2p7373
类似,7373
超过长度 3。