Python——正则表达式 学习笔记

Python——正则表达式 学习笔记

正则表达式

通配符通配符
.匹配除 “\n” 之外的任何单个字符
\d匹配一个数字字符。等价于 [0-9]\D匹配一个非数字字符。等价于 [^0-9]
\s匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]\S匹配任何非空白字符。等价于 [^ \f\n\r\t\v]
\w匹配包括下划线的任何单词字符。等价于’[A-Za-z0-9_]’\W匹配任何非单词字符。等价于 ‘[^A-Za-z0-9_]’
[]匹配[]内范围的字符[^…]匹配不包括字符…
\b字符和空格的位置 ve\b i have a pencil\B匹配不是单词开头或结束的位置
\d* + ?\d* 可以匹配\b or 多个数字 \d+ 可以匹配多个数字(\d? 可以匹配\b or 单个数字 )
\w{m}m>0 匹配m个字符\w{n,m}n-m随意一个数值匹配对应个字符
装饰符装饰符
re.I使匹配对大小写不敏感re.L做本地化识别(locale-aware)匹配
re.M多行匹配,影响 ^ 和 $re.S使 . 匹配包括换行在内的所有字符
re.U根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.re.X该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。
常用符号
匹配字符 = 0 或 =1
+必须跟匹配字符 >= 1
*匹配字符 >= 0
^开头元字符
$结尾元字符

例子

# 前后标签一致
print(re.match(r"<(\w*)><(\w+)>.*</\2></\1>", "<a><span>liujianhong</span></a>"))
print(re.match(r"<(?P<nn1>\w+)><(?P<nn2>\w+)>.*</(?P=nn2)></(?P=nn1)>", "<a><span>liujiang</span></a>"))

re 方法

import re

# 1. re.match() (匹配的正则表达式,string,修饰符)
re_match = re.match("am", "i am a boy")     # 从首个字符开始匹配
print(re_match)

# 2. re.search() (匹配的正则表达式,string,修饰符)
re_search = re.search("boy", "i am a boy")       # 查询整个字符串,直至匹配到为止,否则输出None
print(re_search.group())

# 3. re.sub() (删除匹配的正则表达式, repl, string, count=0, flags=0)
phone = "987-12-12345678 # 这是一个电话啊号码"
re_sub = re.sub("#.*", "", phone)
new_phone = re.sub("\D", " ", re_sub)
print(f"新电话号码:{new_phone}")
def num_double(str_1):
    num = int(str_1.group("value"))
    return str(num * 2)
s = "123ssssdd456"
re_sub_repl = re.sub("(?P<value>\d+)", num_double, s)
print(f"double后的字符串:{re_sub_repl}")

# 4. re.compile()  (匹配的正则表达式, 修饰符)
pattern = re.compile(r'([a-z]+) (\w+)', re.I)   # re.I 表示忽略大小写
m = pattern.match('Hello World Wide Web')
print(m)        # 匹配成功,返回一个 Match 对象
print(m.group(0))       # 返回匹配成功的整个子串
print(m.span(0))        # 返回匹配成功的整个子串的索引

# 5. re.findall() 返回一个列表 (匹配的正则表达式, 要匹配的字符串, 查找的索引范围)
pattern = re.compile(r'\d+')   # 查找数字
result1 = pattern.findall('runoob 123 google 456')      # 匹配全部
result2 = pattern.findall('run88oob123google456', 0, 10)   # 匹配索引范围
result3 = re.compile(r'\d+').findall('run88oob123google456', 0, 10)   # 匹配索引范围
print(result1, type(result1))
print(result2)
print(result3)

# 6. re.finditer() 返回一个迭代器 (匹配的正则表达式, 要匹配的字符串)
it = re.finditer(r"\d+", "12a32bc43jf3")
print(type(it))
for match in it:
    print(match.group())

# 7. re.split() 分割后返回列表 (要分割匹配的正则表达式,要匹配的字符串,)
re_split = re.split('[^A-Za-z0-9]+', 'runoo44b, runoob, runoob.')
re_split3 = re.split('\W+', 'runoob, runoob, runoob.')
re_split2 = re.compile('\W+').split('runoob, runoob, runoob.', 2)
re_split1 = re.split('(\W+)', 'runoob, runoob, runoob.', 1)
print(re_split)
print(re_split3)
print(re_split2)
print(re_split1)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python 爬虫中,正则表达式是非常常用的技术,可以帮助我们从网页中提取出需要的信息。下面是一些常用的正则表达式符号和方法: 1. ".":匹配任意单个字符,除了换行符。 2. "^":匹配字符串的开始位置。 3. "$":匹配字符串的结束位置。 4. "*":匹配前一个字符出现 0 次或多次。 5. "+":匹配前一个字符出现 1 次或多次。 6. "?":匹配前一个字符出现 0 次或 1 次。 7. "{m}":匹配前一个字符出现 m 次。 8. "{m,n}":匹配前一个字符出现 m 到 n 次。 9. "(...)":分组匹配,匹配括号内的表达式。 10. "[...]":匹配括号内的任意一个字符。 11. "[^...]":匹配不在括号内的任意一个字符。 12. "\d":匹配数字,等同于 [0-9]。 13. "\D":匹配非数字,等同于 [^0-9]。 14. "\s":匹配空白字符,包括空格、制表符、换行符等。 15. "\S":匹配非空白字符。 16. "\w":匹配单词字符,包括字母、数字、下划线。 17. "\W":匹配非单词字符。 在 Python 中,使用 re 模块进行正则表达式的匹配。常用的方法包括: 1. re.compile(pattern):将正则表达式编译成一个对象,提高匹配效率。 2. re.search(pattern, string):在字符串中搜索匹配正则表达式的第一个位置。 3. re.findall(pattern, string):在字符串中搜索匹配正则表达式的所有位置,并返回一个列表。 4. re.sub(pattern, repl, string):将字符串中所有匹配正则表达式的字符替换为指定的字符串。 以上是一些常用的正则表达式符号和方法,希望能对你有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值