python正则表达式

python正则表达式

正则表达式简介

# 正则表达式的介绍:
正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配

用自己的话概括>>>:什么是正则表达式
  	利用一些'特殊符号'的组合去字符串中筛选出想要的数据
    
    '所以学习正则很大程度上就是在学习一些特殊符号的使用'
    
# 正则表达式匹配过程:
依次拿出表达式和文本中的字符比较 如果每一个字符都能匹配 则匹配成功;
一旦有匹配不成功的字符则匹配失败 观察表达式中有量词或边界

# 使用正则表达式
'''正则表达式实现手机校验功能'''
import re
phone_number = input('please input your phone number : ').strip()
if re.match('^(13|14|15|18)[0-9]{9}$', phone_number):
    print('是合法的手机号码')
else:
    print('不是合法的手机号码')
    
    """
正则表达式是一门独立的语言 专门用来匹配、校验、筛查所需的数据
任何编程语言都可以使用 在python中如果想用就必须借助于内置模块re
"""
    
#在线测试网址:
http://tool.chinaz.com/regex/

正则表达式之字符组

# 特殊符号默认也是一次匹配一个字符
.							匹配除换行符以外的任意字符
\w				匹配数字、字母、下划线(后续筛选变量名可能用到)
\d							匹配任意的数字
\t							匹配一个制表符(tab键)

^						    匹配字符串的开始
							eg:^99并且这个9必须在开头
        
$                              匹配字符串的结尾
							eg:9$  找9并且这个9必须在末尾
        
\W							匹配非字母或数字或下划线

\D							匹配非数字

a|b						匹配a或者b 管道符就是or(或)的意思

()						给正则表达式分组 不影响正则匹配(后续再讲)

[]						 字符组的概念(里面所有的数据都是或的关系)

[^]						 上箭号出现在了中括号的里面意思是取反操作

正则表达式之量词

"""量词必须跟在表达式的后面 不能单独使用 目的是增加匹配的字符数"""

# 注意量词默认都是贪婪匹配(尽可能多的匹配):

*						重复零次或者多次(默认就是多次:越多越好)

+						重复一次或者多次(默认就是多次:越多越好)

?						重复零次或者一次(默认就是一次:越多越好)

{n}							重复n次

{n,}						重复最少n次最多多次(越多越好)

{n,m}           		  重复n到m次(越多越好)

复杂正则的编写

# 校验用户身份证号码
 身份证号码是一个长度为1518个字符的字符串,如果是15位则全部由数字组成,首位不能为0;如果是18位,则前17位全部是数字,末位可能是数字或x
 ^[1-9][0-9]{14}
 ^[1-9][0-9]{16}[0-9x]
    
    # 校验邮箱、快递单号、座机号...
    
	"""很多常见的正则校验符号 不需要我们编写 直接百度查找即可"""
    
0?(13|14|15|17|18|19)[0-9]{9}	#手机号
    
\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14} # 邮箱


取消转义

\n				\n	 False
\\n				\n	 True
\\\\n			\\n	 True

在python中还可以在字符串的前面加r取消转义 更加方便

贪婪匹配与非贪婪匹配

#什么是贪婪匹配:
贪婪匹配在匹配字符串时总是尝试匹配尽可能多的字符

#什么是非贪婪匹配:
非贪婪匹配在匹配字符串时总是尝试匹配尽可能少的字符

'Python里数量词默认是贪婪模式的,在"*","?","+","{m,n}"后面加上?,可使贪婪模式变成非贪婪模式。'

量词默认都是贪婪匹配 

贪婪非贪婪通常都是利用左右两边的条件作为筛选依据

#代码示例:
<.*>	<script>alert(123)<script>
	#	'<script>alert(123)<script>'

贪婪匹配以最后一个大括号的出现作为结束标志
<.*?>   <script>alert(123)<script>	#<script>  <script>

非贪婪匹配以第一个大括号的出现作为结束标志

re模块

# 什么是re模块

re模块是python独有的
正则表达式所有编程语言都可以使用
re模块、正则表达式是对字符串进行操作

# 在python中无法直接使用正则 需要借助于模块
  1.内置的re模块
  2.第三方的其他模块

match()方法:

#	match()方法
re.match()仅在字符串的开头匹配
#	代码示例:
import re
res =re.match('a','jason kevin atony kaan')
res1 =re.match('a','ajason kevin atony kaan')
print(res)	#	None
print(res1)	# <_sre.SRE_Match object; span=(0, 1), match='a'>
print(res1.group())	#	a

search()方法:

#search()方法
检查匹配项,在字符串中的任何位置检查匹配项(这是Perl的默认设置)

# 代码示例:
res1 = re.search('a', 'jason oscar aaa')  # search(正则表达式,待匹配的文本)
print(res1)  # 查找到一个符合条件的数据就结束  没有则返回None
print(res1.group())  # a  没有则无法调用group() 直接报错

findall()方法:

#定义:
以string列表形式返回string中pattern的所有非重叠匹配项
从左到右扫描该字符串	并以找到的顺序返回匹配项
如果该模式中存在一个或多个组,则返回一个组列表;
否则 返回一个列表
如果模式包含多个组,则这将是一个元组列表
空匹配项包含在结果中

#代码示例:
import re
res = re.findall('a', 'jason oscar aaa')  # findall(正则表达式,待匹配的文本)
print(res)  # ['a', 'a', 'a', 'a', 'a']  # 结果是所有符合条件的数据 并且组织成了列表

finditer()方法:

#定义:
返回一个迭代器 该迭代器在string类型的RE 模式的所有非重叠匹配中产生匹配对象
从左到右扫描该字符串 并以找到的顺序返回匹配项
空匹配项包含在结果中

#代码示例:
re.finditer('[ab]', 'This is a beautiful place!')
<callable_iterator object at 0x0000000000DCDA90> #迭代器对象
ret=re.finditer('[ab]', 'This is a beautiful place!')
next(ret).group() #查看下一个匹配值
'a'
[i.group() for i in ret] #查看剩下所有匹配的值
['b', 'a', 'a']

compile()方法:

#定义:
将正则表达式模式编译为正则表达式对象
可使用match(),search()以及下面所述的其他方法将其用于匹配

#代码示例:
obj = re.compile('\d+')  # 提前写好后续需要经常使用的正则

print(re.findall(obj,'asjd21hj13123j'))  # 写一遍之后 直接反复调用即可

print(re.findall(obj,'234328748hgjghj'))  # 写一遍之后 直接反复调用即可

print(re.findall(obj,'jhjhjh423432423'))  # 写一遍之后 直接反复调用即可

posted @   洛阳城门听风雨  阅读(37)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
点击右上角即可分享
微信分享提示