正则所有表达-所有表达式
第五章 正则
习题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()

浙公网安备 33010602011771号