资讯专栏INFORMATION COLUMN

python大佬养成计划----正则表达式

aikin / 1873人阅读

摘要:正则模块使语言拥有全部的正则表达式功能。函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象。该对象拥有一系列方法用于正则表达式匹配和替换。表示或者匹配项未找到匹配项匹配项未找到匹配项

正则

re = regular experssion
re 模块使 Python 语言拥有全部的正则表达式功能。
compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象。该对象拥有一系列方法用于正则表达式匹配和替换。

作用: 对于字符串进行处理, 会检查这个字符串内容是否与你写的正则表达式匹配

如果匹配, 拿出匹配的内容;
如果不匹配, 忽略不匹配内容;

编写正则的规则

pattern 匹配的正则表达式
string 要匹配的字符串
三种查找方法
1). findall
import re

str = "hello sheen,hello cute."

pattern_1 = r"hello"
pattern_2 = r"sheen"
print(re.findall(pattern_1,str))    #["hello", "hello"]
print(re.findall(pattern_2,str))    #["sheen"]
2).match

match尝试从字符串的起始位置开始匹配,

如果起始位置没有匹配成功, 返回一个None;

如果起始位置匹配成功, 返回一个对象;

import re

str = "hello sheen,hello cute."

pattern_1 = r"hello"
pattern_2 = r"sheen"
print(re.match(pattern_1,str))           #<_sre.SRE_Match object; span=(0, 5), match="hello">
print(re.match(pattern_1,str).group())   #返回match匹配的字符串内容,hello
print(re.match(pattern_2,str))           #None
3).search

search会扫描整个字符串, 只返回第一个匹配成功的内容;

如果能找到, 返回一个对象, 通过group方法获取对应的字符串;

import re

str = "hello sheen,hello cute."

pattern_1 = r"hello"
pattern_2 = r"sheen"
print(re.search(pattern_1,str))             #<_sre.SRE_Match object; span=(0, 5), match="hello">
print(re.search(pattern_1,str).group())     #hello
print(re.search(pattern_2,str))             #<_sre.SRE_Match object; span=(6, 11), match="sheen">
print(re.search(pattern_2,str).group())     #sheen
特殊字符类
.: 匹配除了
之外的任意字符; [.
]
d:  digit--(数字), 匹配一个数字字符, 等价于[0-9]
D: 匹配一个非数字字符, 等价于[^0-9]
s:  space(广义的空格: 空格, 	, 
, 
), 匹配单个任何的空白字符;
S:  匹配除了单个任何的空白字符;
w:  字母数字或者下划线, [a-zA-Z0-9_]
W: 除了字母数字或者下划线, [^a-zA-Z0-9_]
import re

# .
print(re.findall(r".","sheen
star
"))     #["s", "h", "e", "e", "n", "s", "t", "a", "r"]

#d#D
print(re.findall(r"d","当前声望30"))       #["3", "0"]
print(re.findall(r"D","当前声望30"))       #["当", "前", "声", "望"]

#s#S
print(re.findall(r"s", "
当前
声望	为30"))     #["
", "
", "	"]
print(re.findall(r"S", "
当前
声望	为30"))     #["当", "前", "声", "望", "为", "3", "0"]

#w#W
print(re.findall(r"w","lucky超可爱!!"))           #["l", "u", "c", "k", "y", "超", "可", "爱"]
print(re.findall(r"W","lucky超可爱!!"))           #["!", "!"]

指定字符出现次数

匹配字符出现次数:

*: 代表前一个字符出现0次或者无限次;    d*,  .*
+: 代表前一个字符出现一次或者无限次;     d+
?: 代表前一个字符出现1次或者0次;   假设某些字符可省略, 也可以不省略的时候使用

第二种方式:

{m}: 前一个字符出现m次;
{m,}: 前一个字符至少出现m次;  * == {0,}; + ==={1,}
{m,n}: 前一个字符出现m次到n次; ? === {0,1}

import re

#* 代表前一个字符出现0次或者无限次
print(re.findall(r"s*","sheenstar"))        #["s", "", "", "", "", "s", "", "", "", ""]
print(re.findall(r"s*","hello"))            #["", "", "", "", "", ""]

#+ 代表前一个字符出现一次或者无限次
print(re.findall(r"s+","sheenstar"))        #["s", "s"]
print(re.findall(r"s+","hello"))            #[]

# ? 代表前一个字符出现1次或者0次
print(re.findall(r"188-?", "188 6543"))     #["188"]
print(re.findall(r"188-?", "188-6543"))     #["188-"]
print(re.findall(r"188-?", "148-6543"))     #[]


# 匹配电话号码
pattern = r"d{3}[s-]?d{4}[s-]?d{4}"
print(re.findall(pattern,"188 0123 4567"))      #["188 0123 4567"]
print(re.findall(pattern,"188-0123-4567"))      #["188-0123-4567"]
print(re.findall(pattern,"18801234567"))        #["188-0123-4567"]
练习--匹配IP

可以从网上搜索正则表达式生成器,使用别人写好的规则,自己测试。

import re

# | 表示或者
pattern = r"(25[0-5]|2[0-4]d|[0-1]d{2}|[1-9]?d).(25[0-5]|2[0-4]d|[0-1]d{2}|[1-9]?d).(25[0-5]|2[0-4]d|[0-1]d{2}|[1-9]?d).(25[0-5]|2[0-4]d|[0-1]d{2}|[1-9]?d)$"

print(re.findall(pattern,"172.25.254.34"))  #[("172", "25", "254", "34")]

matchObj_1 = re.match(pattern,"172.25.254.34")
if matchObj_1:
    print("匹配项:",matchObj_1.group())                     #172.25.254.34
else:
    print("未找到匹配项")

matchObj_2 = re.match(pattern,"172.25.254.343")
if matchObj_2:
    print("匹配项:",matchObj_2.group())                     
else:
    print("未找到匹配项")

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/44827.html

相关文章

  • python大佬养成计划----flask应用(表单)

    摘要:特别是可以访问请求提交的表单数据。表单的代码生成和验证提交的表单数据就是两个很好的例子。优势扩展使得处理表单能获得更愉快的体验。设计了表单库来使可以更加简便地管理操作表单数据。 1. 为什么使用Flask-WTF? request对象公开了所有客户端发送的请求信息。特别是request.form可以访问POST请求提交的表单数据。 尽管Flask的request对象提供的支持足以处理w...

    alighters 评论0 收藏0
  • python大佬养成计划----Django图书人物适配系统(前端)

    摘要:两者相同的地方是都可以将一个普通函数变成视图函数。不同的是,使用装饰器定义路由,而使用正则表达式定义路由。中间什么都没有,表示这个正则匹配的是根目录,。最后修改的网页显示如图项目框架图 Django添加路由 与flask一样,django也需要使用路由将URL与服务端要执行的代码关联。 两者相同的地方是都可以将一个普通函数变成视图函数。不同的是,flask使用装饰器@app.route...

    amuqiao 评论0 收藏0
  • python大佬养成计划----HTML DOM

    摘要:定义了所有元素的对象和属性,以及访问它们的方法。换言之,是关于如何获取修改添加或删除元素的标准。根据标准,中所有内容都是节点。好比我有两个下拉列表,第一列表是选择省份,那么我选择某一个省份,那么另一个列表也会对应显示该省份的城市。 什么是DOM? DOM (Document Object Model) 译为文档对象模型,是 HTML 和 XML 文档的编程接口。HTML DOM 定义了...

    leejan97 评论0 收藏0

发表评论

0条评论

aikin

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<