[英]Regular Expression: String contains substring with max length 15 and minimum 7 digits
如何检查字符串中是否存在子字符串
我当前的 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.