正则所有表达-所有表达式

第五章 正则

习题1已做判断是否匹配成功,并输出对应匹配信息

 

import re

source = "1huhongqiang"

if re.match("hu",source):#if re.match is not None

    print("可以匹配到")

else:

    print ("没有匹配到")

 

if re.search("hu",source):

     print ("可以匹配到")

else:

print ("没有匹配到")

习题2已做找出一个字符串中是否有连续的5个数字

>>> print re.search(r"\d{5}","1234aadd222222").group()

 

 

习题3已做出一个字符串中的连续5个数字,要求数字前后必须是非数字

 

>>> re.search(r'(\D\d{5}\D)|(^\d{5}\D)|(\D\d{5}$)|(^\d{5}$)','12567').group()

'12567'

 

习题4:已做统计一个文件中单词的数量

with open("d:\\word.txt","r") as file_obj:

    print(len(re.findall(r"(\b[A-Za-z]+\b)",file_obj.read())))

 

 

习题5:已做a1b23c4d非字符内容拼成一个字符串

>>> "".join(re.findall(r"[^A-Za-z]","a1b23c4d"))

'1234'

 

习题6: 已做取最后一个字母

>>> re.findall(r"[A-Za-z]","ab12cd")[-1]

'd'

>>> re.search(r"[A-Za-z]$","ab12cd").group()

'd'

 

习题7: 已做找出一个字符串中的所有数字

>>> pattern = re.compile(r"\d+")

>>> pattern.findall("a1cd33dd99kddd")

['1', '33', '99']

 

>>> pattern = re.compile(r"\d")

>>> pattern.findall("a1cd33dd99kddd")

['1', '3', '3', '9', '9']

 

 

习题8: 已做把一个字符串中的所有字母找出并拼成一个字符串

>>> pattern = re.compile(r"[A-Za-z]")

>>> "".join(pattern.findall("a1cd34dsf0dsfkjk"))

'acddsfdsfkjk'

 

习题9: 已做输出句子中的所有单词

>>> s = "I am a boy! you are a girl!"

>>> pattern = re.compile(r"([A-Za-z]+)")

>>> pattern.findall(s)

['I', 'am', 'a', 'boy', 'you', 'are', 'a', 'girl']

 

 

 

 

课后习题:

1、已做匹配一行文字中的所有开头的字母内容

方法一

import re

s = "abc123"

print(re.match(r"^[A-Za-z]+",s).group())

 

方法二

pattern = re.compile(r"[A-Za-z]+")

print(pattern.match(s).group())

2、已做匹配一行文字中的所有开头的数字内容

import re

s = "1112ddd"

print(re.match(r"\d+",s).group())

 

3、已做匹配一行文字中的所有开头的数字内容或字母内容

import re

s = "123ddd_dddd33"

print(re.match(r"([a-zA-Z0-9]+)",s).group())

4、已做只匹配包含字母和数字的行

import re

with open("d:\\1.txt") as file_obj:

    for line in file_obj:

        if re.match(r"[a-zA-Z0-9]+$",line.strip()):

            print(line)

课后习题:

5已做写一个正则表达式,使其能同时识别下面所有的字符串:

'bat','bit', 'but', 'hat', 'hit', 'hut

import re

pattern = re.compile(r"[b|h][a|i|u]t")

lst= ['bat', 'bit', 'but', 'hat', 'hit', 'hut']

for word in lst:

      print(pattern.match(word))

6已做匹配所有合法的python标识符

import re

word_lst = ["Abc112_","akkk_222A","_12ABc","123abcA"]

for word in word_lst:

    if re.match(r"^[A-Za-z_]\w+",word):

        print(word) 

1、已做,不懂提取每行中完整的年月日和时间字段

import re

pattern = re.compile(r"\d{4}-[0-1][0-9]-[0-3][0-9]\s[0-2][0-4]:[0-5][0-9]:[0-5][0-9]")

with open("d:\\4.txt") as fp:

    for line in fp:

        print(pattern.search(line).group())

2、已做将每行中的电子邮件地址替换为你自己的电子邮件地址

pattern = re.compile(r"\w+@.*[.com|.net|.cn]")

r_lst = []

with open("d:\\email.txt") as file_obj:

    for line in file_obj:

        s = re.sub(r"\w+@.*[.com|.net|.cn]","hhs8286@qq.com",line)

        r_lst.append(s)

       

        

with open("d:\\email.txt","w") as fp:

    fp.writelines(r_lst)

                   

with open("d:\\email.txt") as fp:

    print(fp.read())                

9已做匹配\home关键字:

import re

re.match(r'\\home',"\home")

10已做使用正则提取出字符串中的单词

s = "you are a good boy! 12345"

import re

name_list = re.findall(r"\b[a-zA-Z]+\b",s)

print(name_list)

 

s = "you are a good boy! 12345"

import re

pattern = re.compile(r"\b[a-z]+\b",re.I)

name_list = pattern.findall(s)

print(name_list)

1、已做使用正则表达式匹配合法的邮件地址

email = ["hhq123_a@qq.com","666@163.org"]

import re

pattern = re.compile(r"\w+@\w+.\w+")

for e in email:

print(pattern.match(e).group())

 

 

12、国际域名格式如下

域名由各国文字的特定字符集、英文字母、数字及-(即连字符或减号)任意组合而成, 但开头及结尾均不能含有“-”,“-”不能连续出现。域名中字母不分大小写。域名最长可达60个字节(包括后缀.com.net.org)

 

import re

s = "www.si-na.com.cn"

pattern = re.compile(r"[a-z0-9][a-z0-9-]+(\.[a-z0-9-]+)+")

pattern.match(s).group()

13、提取字符串中合法的超链接地址比如:s = '<a href="http://www.gloryroad.cn">光荣之路官网</a>'要求,给出的正则表达式能兼顾所有链接地址。

import re

s = '<a href="http://www.gloryroad.cn">'

pattern = re.compile(r"http://\w+(\.\w+\.\w+)+")

pattern.search(s).group()

1、已做统计文件中单词个数

方式1

import re

word_list = []

with open("e:\\1.txt") as file_obj:

    content = file_obj.read()

word_list = re.findall(r"\b[a-z]+\b",content,re.I)

print("word number: ",len(word_list))

 

方式2

word_list = []

with open("e:\\1.txt") as file_obj:

    content = file_obj.read()

for word in content:

    for c in word:

        if not c.isalpha():

            content = content.replace(c," ")

word_list = content.split()

print("word number: ",len(word_list))

2、已做写一个函数,其中用正则验证密码的强度

#至少包含6个字符,至少一个字母、一个数字,只能包含字母数字

def check_password_strong(passwd):

    import re

    if re.match(r"(?=.*[A-Za-z])(?=.*[0-9])[a-zA-Z0-9]{6,}",passwd):

        print("Strong password")

    else:

        print("Weak paasword")

        

check_password_strong("ad124444")

check_password_strong("4455554")   

15已做匹配ip的正则表达式:

import re

pattern=re.compile(r'^(([1-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]).){3}([1-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])$')

pattern.match("192.168.1.19").group()

posted @ 2020-01-14 09:22  进阶的淑琴  阅读(564)  评论(0)    收藏  举报