python3学习09--模块,正则

新年快乐!!!!!!!!!!!!!!!!!!!!!

# python3 常用标准库预览

# 操作系统接口 os
import os

print(os.getcwd()) #当前工作目录 F:\PycharmProjects\pythonStudy\study09
'''
os的方法很多 但我这边是在ide里练习的 目前感觉用不上很多 制作了解
'''

# 文件通配符 glob
#glob模块提供了一个函数用于从目录通配符搜索中生成文件列表
import glob
print(glob.glob('*.py')) #['01moduleTest.py', '__init__.py']

#命令行参数
import sys

print(sys.argv) # ['F:/PycharmProjects/pythonStudy/study09/01moduleTest.py']

# 字符串正则匹配 re
#正则表达式应该在未来挺常用的  后面会具体学习
import re

print(re.findall(r'\bf[a-z]*', 'which foot or hand fell fastest'))
# ['foot', 'fell', 'fastest']

#数学 math
import  math
print(math.pi) #3.141592653589793

# 访问互联网
# 这个应该是我后续爬虫部分要经常用到的把 (大概)
# from urllib.request import urlopen
# for line in urlopen('https://www.baidu.com/'):
#     line=line.decode('utf-8')
#     print(line)

'''
<html>

<head>

	<script>

		location.replace(location.href.replace("https://","http://"));

	</script>

</head>

<body>

	<noscript><meta http-equiv="refresh" content="0;url=http://www.baidu.com/"></noscript>

</body>

</html>
'''

# 日期和时间
from datetime import date
print(date.today()) #2021-02-11


正则这里,我目前大概只是能看懂一些基本的正则式,实际使用可能还是有点陌生,这个得看工作实际吧。我记得我做javaweb时,前端js或者后端用到正则时,都是百度的。。。。

#python  正则表达式 学习

import re

# match函数
# re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。

# re.match(pattern, string, flags=0)
'''
pattern 正则表达式
string 要匹配的字符串
flags 标志位 控制匹配方式
'''

print(re.match('www', 'www.baidu.com')) # <re.Match object; span=(0, 3), match='www'>
print(re.match('www', 'www.baidu.com').span())  # (0, 3)
print(re.match('com', 'www.baidu.com')) #None
# 可以看出match是从起始位置开始匹配的

#group groups 函数
# 我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。

line = "Cats are smarter than dogs"
# .* 表示任意匹配除换行符(\n、\r)之外的任何单个或多个字符
# (.*?) 表示"非贪婪"模式,只保存第一个匹配到的子串
matchObj = re.match(r'(.*) are (.*?) .*', line, re.M | re.I)

if matchObj:
    print("matchObj.group() : ", matchObj.group()) #matchObj.group() :  Cats are smarter than dogs
    print("matchObj.group(1) : ", matchObj.group(1)) # matchObj.group(1) :  Cats
    print("matchObj.group(2) : ", matchObj.group(2)) # matchObj.group(2) :  smarter
    print("matchObj.groups() : ", matchObj.groups()) # matchObj.groups() :  ('Cats', 'smarter')

else:
    print("No match!!")

# search
# re.search 扫描整个字符串并返回第一个成功的匹配。

print(re.search('www', 'www.baidu.com').span())  # 在起始位置匹配 (0, 3)
print(re.search('com', 'www.baidu.com').span())         # 不在起始位置匹配 (10, 13)

line = "Cats are smarter than dogs"

searchObj = re.search(r'(.*) are (.*?) .*', line, re.M | re.I)

if searchObj:
    print("searchObj.group() : ", searchObj.group()) # searchObj.group() :  Cats are smarter than dogs
    print("searchObj.group(1) : ", searchObj.group(1)) #searchObj.group(1) :  Cats
    print("searchObj.group(2) : ", searchObj.group(2)) #searchObj.group(2) :  smarter
    print("searchObj.groups() : ", searchObj.groups()) # searchObj.groups() :  ('Cats', 'smarter')
else:
    print("Nothing found!!")

'''
match 与 search 的区别
match只匹配字符串的开始,如果开始不符合正则,则匹配失败,返回None
search匹配整个字符串,直到找到一个符合正则的匹配
'''

# 检索与替换 sub
# def sub(pattern, repl, string, count=0, flags=0):
phone='小红的电话是:123-456-789'
#将中文去掉
phone=re.sub(r'^.*:',"",phone)
print(phone) #123-456-789
#将-去掉
phone=re.sub(r'\D',"",phone)
print(phone) #123456789

#repl参数是一个函数
# 这里将数字部分乘2
def double(matched):
    value=int(matched.group('value'))
    return str(value*2)
s = 'A23G4HFD567'
print(re.sub('(?P<value>\d+)', double, s))  # A46G8HFD1134


#compile函数 用于编译正则表达式 返回一个正则对象
rev=re.compile(r'\d+')
res=rev.search('zxv123456zxy8888')
print(res.group()) # 123456

# findall
#在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。

#注意: match 和 search 是匹配一次 findall 匹配所有。
res1=re.findall(r'\d+','zxy123xyz456qqq888')
print(res1) # ['123', '456', '888']

#finditer
# 和 findall 类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。
it = re.finditer(r"\d+","12a32bc43jf3")
for match in it:
    print (match )
    print(match.group())
    '''
    <re.Match object; span=(0, 2), match='12'>
    12
    <re.Match object; span=(3, 5), match='32'>
    32
    <re.Match object; span=(7, 9), match='43'>
    43
    <re.Match object; span=(11, 12), match='3'>
    3
    '''

#split 正则分割
print(re.split('\W+', 'runoob, runoob, runoob.'))
# ['runoob', 'runoob', 'runoob', '']

# 正则表达式对象
# re.compile() 返回 RegexObject 对象。
'''
re.MatchObject
group() 返回被 RE 匹配的字符串。
    start() 返回匹配开始的位置
    end() 返回匹配结束的位置
    span() 返回一个元组包含匹配 (开始,结束) 的位置
'''

'''
正则常用标识符
re.I 使匹配对大小写不敏感
re.M 多行匹配
re.S 使 . 匹配包括换行在内的所有字符
re.U 根据Unicode字符集解析字符。
re.X 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。
'''

'''
正则表达式模式
^ 匹配字符串的开头
$ 匹配字符串的末尾
. 匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符。
[..] 用来表示一组字符,单独列出:[amk] 匹配 'a','m'或'k'
[^..] 	不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。
re* 匹配0个或者多个
re+ 匹配1个或者多个
re? 匹配0个或者1个
re{n} 匹配n个前面表达式。例如,"o{2}"不能匹配"Bob"中的"o",但是能匹配"food"中的两个o。
re{ n,} 精确匹配n个前面表达式。例如,"o{2,}"不能匹配"Bob"中的"o",但能匹配"foooood"中的所有o。"o{1,}"等价于"o+"。"o{0,}"则等价于"o*"
re{n,m}  匹配 n 到 m 次由前面的正则表达式定义的片段
a|b 匹配a或b
(re) 匹配括号中的表达式
\w 匹配数字字母下划线
\W 匹配非数字字母下划线
\s 匹配任意空白字符
\S 匹配任意非空字符
\d 匹配任意数字
\D 匹配任意非数字
\A 匹配字符串开始
\Z 匹配字符串结束 (存在换行,只匹配到换行前的结束字符串)
\z 匹配字符串结束

'''

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值