python正则表达式学习笔记

本文详细介绍了正则表达式的各种符号及其用法,包括常见的匹配模式如A|B、.、^、$等,以及如何使用特殊字符进行精确匹配。通过本文,读者可以快速掌握正则表达式的基本原理和实践技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

正则表达式

学习资源:https://github.com/EbookFoundation/free-programming-books/blob/master/free-programming-books-zh.md

正则表达例子:

|    A|B  匹配 A或者B

.    A.A  匹配  A.A 匹配任何字符 除了\n除外

^   ^Demo  匹配字符串起始部分

$   abc$   匹配字符串终止部分

*    [A-Za-z0-9]* 匹配零次多次前面出现的表达式

+   [a-z]+\.com 匹配1次或多次前面出现的表达式

?  abc?  匹配0次或者1次前面出现的表达式

{N}  [0-9]{3} 匹配N次前面出现的表达式  {指定参数} {,逗号分割参数}

[...]   [abc] 匹配来自字符集的任意单一字符

[..x-y..]  [a-z]匹配下x-y范围中的任意单一字符

[^...]    [^abc],[^a-z]不匹配此字符集中出现的任何一个字符,包括某一范围的字符

(*|+|?{})?    .*?[a-z] 用于匹配上面频繁出现/重复出现符号的非贪婪版本

(...)   ([0-9]{3})?,f(00|u)bar 匹配封闭的正则表达式,然后另存为子组

特殊字符用法

\d    data\d+.txt 匹配任何十进制[0-9]  \D与\d相反,不匹配任何非数值型的数字

\w   [A-Za-z]\w+  匹配任何字母数字字符    \W相反

\s    of\sthe 匹配任何空格字符, \S相反

\b    \bThe\b匹配任何单词边界 , \B相反

\N   匹配已保存的子组N  

\c    \.,\\,\* 逐字匹配任何特殊字符

\A(\Z)  匹配字符串的起始

扩展表示法

(?iLmsux)   (?x), (? im) 在正则表达式中嵌入一个或多个特殊标记参数

(?:...)  (?:\w+\.)*  表示一个匹配不用保存的分组

(?P<name>...) 像一个仅有name标识符而不是数字ID标识的正则分组匹配

(?P=name)   在同一个字符中匹配由(?P<name>)分组的之前文本

(?#...)   表示注释

(?=...)   匹配条件是如果...出现在之后的位置,而不使用输入字符;称作向前视断言

(?!..)     匹配条件是如果...不出现在之后的位置

(?<=...)  匹配条件是如果,出现在之前的位置

(?<!...)   匹配条件是如果...不出现在之前的位置

(?(id/name)Y/N)  如果分组所提供的id或者name存在,就返回正则表达式的条件匹配Y,如果不存在,就返回N ,N可选项

 

### Python 正则表达式学习笔记 #### 1. 基本概念 正则表达式是一种用于匹配字符串中字符模式的强大工具。通过定义特定的语法结构,可以实现复杂的字符串搜索、替换等功能。 #### 2. 编译正则表达式对象 为了提高效率,在多次使用同一个模式时应该先将其编译成正则表达式对象。这可以通过 `re.compile()` 函数完成[^2]: ```python pattern = re.compile('www') matches = pattern.findall('www.baidu.www') # 结果为 ['www', 'www'] ``` #### 3. 使用特殊字符 某些字符具有特殊的含义,比如点号`.`表示任意单个字符(除换行符外)。如果想要匹配这些字符本身,则需要用反斜杠`\`来转义它们[^3]: ```python result = re.split(r'\.', "www.www.baidu.com") # 结果为 ['www', 'www', 'baidu', 'com'] ``` #### 4. 查找所有匹配项 函数 `findall()` 可以用来找到输入字符串中所有与给定模式相匹配的部分,并返回一个列表形式的结果集: ```python text = 'www.baidu.www' regex = re.compile('www') found_items = regex.findall(text) # 返回 ['www', 'www'] ``` #### 5. 实际应用案例 - 网页抓取 下面是一个简单的例子,展示了如何利用正则表达式从HTML文档中提取所需的信息。这里的目标是从指定URL页面内获取章节标题并打印出来[^4]: ```python import re import requests url = "https://example.com" response = requests.get(url) html_content = response.content.decode("utf-8") chapter_list_html = re.findall( r'<ul class="chapter-list clearfix">.*?</ul>', html_content, flags=re.DOTALL)[0] titles = re.findall( r'<a.*?title="(.*?)".*?>', chapter_list_html) for title in titles: print(title) print(f"共爬取到 {len(titles)} 条记录") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值