繁体   English   中英

正则表达式:字符串包含最大长度为 15 且最小为 7 位的子字符串

[英]Regular Expression: String contains substring with max length 15 and minimum 7 digits

如何检查字符串中是否存在子字符串

  • 最大长度为 15 个字符
  • 其中包括最少 7 位数字

我当前的 python 正则表达式:

(?:\D*\d\D*)[\D\d]{7,15}


Examples:
1) aaaa1111111aaaaaaaaaaaaaaaaa [match]
2) 111aaaaaaaaaaaaaaaaaaaaa1111 [no match]
3) 111aaa1aaa111aaaaaaaaaaaaaaa [match]

除非您知道匹配的左手和右手上下文,否则编写这样的正则表达式不太可行,因为您必须列出模式的所有可能的长度变化。

因此,如果可能,使用re.findall(r'(?=(\\d(?:\\D*\\d){6}))', s)提取所有可能重叠的匹配,然后检查是否至少有一个匹配长度不超过 15 个字符。

看一个Python 演示

import re
l = ['aaaa1111111aaaaaaaaaaaaaaaaa', '111aaa1aaa111aaaaaaaaaaaaaaa', '111aaaaaaaaaaaaaaaaaaaaa1111']
for s in l:
    print(s)
    matches = re.findall(r'(?=(\d(?:\D*\d){6}))', s)
    if bool([x for x in matches if len(x) <= 15]):
        print("[matched]")
    else:
        print("[not matched]")

输出:

aaaa1111111aaaaaaaaaaaaaaaaa
[matched]
111aaa1aaa111aaaaaaaaaaaaaaa
[matched]
111aaaaaaaaaaaaaaaaaaaaa1111
[not matched]

注意: (?=(\\d(?:\\D*\\d){6}))匹配空字符串,同时捕获一个数字序列,后跟六个出现的任何零个或多个非数字字符后跟一个数字,并且re.findall只返回捕获的那些子字符串。

更新

我生成了大小为 7 到 15 个字符且至少有 7 位数字的字符串,并从这数千个字符串中生成了一个模式。 您可以按原样使用它,请参阅此 Python 演示

输出与上面相同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM