我尝试编写一个正则表达式来匹配一个10位数字,它必须包含数字4。例如:
s=['123456abc','abcisjgm','1234567895','1231231231']
for i in s:
if re.findall(r'[4]\d{9}\b',i):
print(i, "is valid")
else:
print(i, "is not valid")输出如下:
123456abc is not valid
abcisjgm is not valid
1234567895 is not valid -----> this should be valid
1231231231 is not valid发布于 2020-04-27 23:48:53
您可以在re.search中使用以下模式
^(?=\d*?4)\d{10}$请参阅regex demo。
^ - string(?=\d*?4)的开始-0位或更多数字后必须有possible\d{10} - ten digits$ - 4 -字符串的结束。请参阅Python demo
import re
s=['123456abc','abcisjgm','1234567895','1231231231']
for i in s:
if re.search(r'^(?=\d*?4)\d{10}$', i):
print(i, "is valid")
else:
print(i, "is not valid")输出:
123456abc is not valid
abcisjgm is not valid
1234567895 is valid
1231231231 is not valid发布于 2020-04-27 23:53:02
另一种方法是使用正向先行检查10位数字。
匹配除4以外的数字,然后匹配4,后跟可选数字。
^(?=\d{10}$)[0-35-9]*4\d*$string
(?=\d{10}$)的开始断言10 digits
[0-35-9]* Match 0+乘以除4
4以外的数字4
\d* Match digit
$ 0+ 0+乘以字符串End of 如果它可以在一个字符串中出现多次,那么您还可以使用单词边界\b
示例代码
import re
s=['123456abc','abcisjgm','1234567895','1231231231']
for i in s:
if re.findall(r'\b(?=\d{10}$)[0-35-9]*4\d*\b',i):
print(i, "is valid")
else:
print(i, "is not valid")输出
123456abc is not valid
abcisjgm is not valid
1234567895 is valid
1231231231 is not validhttps://stackoverflow.com/questions/61462760
复制相似问题