re正则表达式
20.如何写一个正则表达式,匹配每 3 位就有一个逗号的数字?它必须匹配以下数字:
‘42’
‘1,234’
‘6,368,745’
但不会匹配:
‘12,34,567’ (逗号之间只有两位数字)
‘1234’ (缺少逗号)
栗子:
import re
import requests
text = str(input('请输入测试栗子:'))
regex = re.compile(r'^\d{1,3}(,\d{3})*$')
res = regex.search(text)
print(res)
问题:
1、匹配1到3个数字正确写法:regex = re.compile(r’\d{1,3}’),而不应该是:regex = re.compile(r’\d{,3}’),这样会造成多匹配一个空字符
2、插入字符和美元字符
这里的文本是一个字符串的开始和结尾
而不是文本里面的一段段,你自以为的开始和结尾
21.如何写一个正则表达式,匹配姓 Nakamoto 的完整姓名?你可以假定名字总是出现在姓前面,是一个大写字母开头的单词。该正则表达式必须匹配:
‘Satoshi Nakamoto’
‘Alice Nakamoto’
‘RoboCop Nakamoto’
但不匹配:
‘satoshi Nakamoto’(名字没有大写首字母)
‘Mr. Nakamoto’(前面的单词包含非字母字符)
‘Nakamoto’ (没有名字)
‘Satoshi nakamoto’(姓没有首字母大写)
栗子:
import re
import requests
text = str(input('请输入测试栗子'))
regex = re.compile(r'^[A-Z](\w)* Nakamoto$')
res = regex.search(text)
print(res)
问题:
匹配大写字母的是建立特殊类[A-Z]
\W是匹配单词外的字符
22.如何编写一个正则表达式匹配一个句子,它的第一个词是 Alice、Bob 或Carol,第二个词是 eats、pets 或 throws,第三个词是 apples、cats 或 baseballs。该句子以句点结束。这个正则表达式应该不区分大小写。它必须匹配:
‘Alice eats apples.’
‘Bob pets cats.’
‘Carol throws baseballs.’
‘Alice throws Apples.’
‘BOB EATS CATS.’
但不匹配:
‘RoboCop eats apples.’
‘ALICE THROWS FOOTBALLS.’
‘Carol eats 7 cats.’
栗子:
import re
import requests
text = str(input('请输入测试栗子:'))
regex = re.compile(r'(Alice|Bob|Carol) (eats|pets|throws) (apples|cats|baseballs).$',re.I)
res = regex.search(text)
print(res)
7.18.1 强口令检测
写一个函数,它使用正则表达式,确保传入的口令字符串是强口令。强口令的定义是:长度不少于 8 个字符,同时包含大写和小写字符,至少有一位数字。你可能需要用多个正则表达式来测试该字符串,以保证它的强度。
栗子:
import re
import requests
def f(text):
if len(text) >= 8: #确保长度
regex = re.compile(r'\d+') #确保至少一位数字
if regex.search(text) == None:
return False
regex = re.compile(r'[A-Z]+') #确保至少一位大写字母
if regex.search(text) == None:
return False
regex = re.compile(r'[a-z]+') # 确保至少一位小写字母
if regex.search(text) == None:
return False
else:
return True
else:
return False
text = input("请输入强口令:")
t = f(text)
if t == True:
print("你输入的强口令合法!")
else:
print("你输入的强口令非法!")