正则表达式简单习题练习及总结

正则表达式简单习题练习

1、长度为8-10的用户密码(以字母开头 包含字母、数字、下划线)

2、验证用户名,长度为6-18位的英文字母组成

3、邮箱验证126,163邮箱:6~18个字符,可使用字母、数字、下划线,需以字母开头

4、匹配手机号码(11位数字)
移动号码段:139、138、137、136、135、134、150、151、152、157、158、159、182、183、187、188、147
联通号码段:130、131、132、136、185、186、145
电信号码段:133、153、180、189

5、‘Save your heart for someone who cares’ 请使用正则将文本中的"s"替换成"S",请写Python代码完成匹配替换。

6、‘三生三世,十里桃花九州海上牧云记莫斯科行动’ 请使用正则将标签中的全部内容匹配出来,请写Python代码完成匹配。

import re
# 1、长度为8-10的用户密码(以字母开头 包含字母、数字、下划线)
while True:
 code=input('请输入长度为8-10的用户密码')
 rulecode=re.compile('[a-zA-Z][\w]{7,9}$')
 if rulecode.match(code):
     print('符合规则')
 else:
     print('请重新输入密码')
#!!!!!注意最后的$不要漏掉,否则无法排除密码设置过长

# 2、验证用户名,长度为6-18位的英文字母组成
while True:
    name=input('请输入6-18位由英文字母组成的用户名')
    rulename=re.compile('[a-zA-Z]{6,18}$')
    if rulename.match(name):
        print('符合规则')
    else:
        print('请重新输入用户名')
        

# 3、邮箱验证126,163邮箱:6~18个字符,可使用字母、数字、下划线,需以字母开头
while True:
    address=input('请输入126或163邮箱')
    ruleaddress=re.compile('[a-zA-Z][\w]{5,17}@(126|163)\.com$')
    if ruleaddress.match(address):
     print('符合规则')
    else:
      print('请重新输入邮箱')


# 4、匹配手机号码(11位数字)
# 移动号码段:139、138、137、136、135、134、150、151、152、157、158、159、182、183、187、188、147
# 联通号码段:130、131、132、136、185、186、145
# 电信号码段:133、153、180、189
while True:
    phone=input('请输入你的手机号码')
    codephone1=re.compile('139|136|135[\d]{8}$]')
    codephone2=re.compile('130|131|132[\d]{8}$')
    codephone3=re.compile('133|153[\d]{8}$')
    if codephone1.match(phone):
        print('移动')
    if codephone2.match(phone):
        print('联通')
    if codephone3.match(phone):
        print('电信')


# 5、'Save your heart for someone who cares' 请使用正则将文本中的"s"替换成"S",请写Python代码完成匹配替换。
data='Save your heart for someone who cares'
print(re.sub('s','S',data))


# 6、'<span>三生三世,十里桃花</span><span>九州海上牧云记</span><span>莫斯科行动</span>' 请使用正则将<span>标签中的全部内容匹配出来,请写Python代码完成匹配。
data2='<span>三生三世,十里桃花</span><span>九州海上牧云记</span><span>莫斯科行动</span>'
rule2=re.compile(r'<span>(.*)</span><span>(.*)</span><span>(.*)</span>')
result=rule2.findall(data2)
for i in result:
    for k in i:
      print(k)

简单知识点总结:

\d 匹配任意单个数字
\D 匹配非数字
\w 匹配任意单个字母数字下划线
\W 匹配\w之外的任意单个字符
\s 匹配单个空格 x
\S 匹配非空白,除空格,tab键之类 x
\n 匹配换行符
. 匹配任意单个字符【换行符除外】
\num 匹配前面引用的分组
A{3} 精准N次匹配
A{3,} 最少出现n次
\d{3,5}约定出现最少次数和最大次数
\d* 可以出现0次至无限次
\d+ 最少出现一次
\d? 最多出现一次
^A.* 头匹配
.*A$ 尾部匹配
^A.*A$ 全字匹配
x|y 匹配左右两边的字符 x/y (注意也可以多组参考电话习题)
[xyz] 字符集合允许出现集合内任意单个字符 例如:[a-zA-Z]
[^xyz] 不得出现xyz

贪婪模式&非贪婪模式 后面加个?进行转变
在满足条件的情况下尽可能的去匹配多的字符串(默认)
在满足条件的情况下尽可能的去匹配少的字符串
re.I对大小写不敏感
re.search/re.findall/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值