### Python正则表达式知识点详解 #### 一、正则表达式引擎介绍 在Python中,`re`模块提供了一套强大的工具集用于处理正则表达式。通过该模块,可以将正则表达式(Regular Expression,简称RE)字符串编译成对象,并利用这些对象进行模式匹配。 #### 二、编译标志—flags 在使用正则表达式时,可以通过设置不同的编译标志来改变匹配的行为。常用的编译标志包括: 1. **dotall** (`s`):启用此标志后,`.`将匹配包括换行符在内的所有字符。 2. **ignorecase** (`I`):设置该标志可以使匹配忽略大小写差异。 3. **locale** (`L`):启用本地化支持,使得匹配能够识别特定语言环境中的字符。 4. **multiline** (`M`):启用多行匹配模式,此时`^`和`$`可以分别匹配每行的开始和结束位置,而不仅仅只匹配整个字符串的开始和结束。 5. **verbose** (`X`):启用该模式可以让正则表达式更具可读性,允许在正则表达式中添加空格和注释。 #### 三、字符集与位置符号 1. **`[]`**:用于表示一组字符,如`[io]`表示匹配`i`或`o`。 - 示例代码: ```python import re s = 'tiptop' r = r't[io]p' print(re.findall(r, s)) ``` - 如果要表示一个范围,可以使用`[0-9a-zA-Z]`这样的形式,表示0到9以及a到z和A到Z之间的字符。 2. **`^`**:有两种用途: - 当`^`位于方括号内时(例如`[^io]`),表示匹配不是方括号内的任何字符。 - 当`^`位于方括号外时,则表示匹配字符串的开头。 ```python import re s = 'ahellohello' r = r'^hello' print(re.findall(r, s)) ``` 3. **`$`**:表示匹配字符串的结尾。 ```python import re s = 'hellohello' r = r'hello$' print(re.findall(r, s)) ``` 4. **`[^]`** 和 `[..$]` 或 `[$]`:当`[^]`不在方括号的开头时,它和其他字符一样被正常处理。`[..$]`和`[$]`也是如此。 5. **`^`作为普通字符**:如果希望`^`被视为普通字符而非特殊符号,可以通过在前面加上反斜杠`\`进行转义。 ```python import re s = '^abc^abc^abc' r = r'\^abc' print(re.findall(r, s)) ``` #### 四、转义字符`\` 转义字符`\`通常用于指定特殊字符的意义,或者避免某些元字符被解释为特殊含义。常见的转义字符包括: 1. **`\d`**:匹配任何十进制数字,相当于`[0-9]`。 2. **`\D`**:匹配任何非数字字符,相当于`[^0-9]`。 3. **`\s`**:匹配任何空白字符,相当于`[\t\n\r\f\v]`。 4. **`\w`**:匹配任何字母数字字符,相当于`[a-zA-Z0-9]`。 5. **`\W`**:匹配任何非字母数字字符,相当于`[^a-zA-Z0-9]`。 #### 五、重复量词 重复量词用于指定某个字符或模式重复出现的次数。 1. **`{n}`**:表示前面的字符必须恰好出现`n`次。 ```python import re n = '18829789854' r = r'^1\d{10}$' print(re.findall(r, n)) ``` 2. **`*`**:表示前面的字符可以出现零次或多次。 3. **`+`**:表示前面的字符至少出现一次。 4. **`?`**:表示前面的字符可以出现零次或一次,还可以用来控制贪婪与非贪婪匹配。 - 贪婪匹配示例: ```python import re s = 'abbbbbbb' r = r'ab+' print(re.findall(r, s)) ``` - 非贪婪匹配示例: ```python import re s = 'abbbbbbb' r = r'ab+?' print(re.findall(r, s)) ``` 通过以上知识点的学习,我们可以更加灵活地运用Python中的正则表达式来解决各种文本匹配问题。
模块re
{
re模块提供了一个正则表达式引擎的接口,可以让你将REstring编译在对象并用它们来进行匹配
}
疑问:字符串前加r的作用,反斜杠就不会被任何特殊处理
{
编译标志-flages
dotall[s],使匹配包括换行在内的所有字符
ignorecase[I],使匹配对大小写不敏感
locale[L],做本地化识别(locale-aware)匹配法语等
multiline[M],多行匹配,影响^和$
varbose[X],能够使用REs的verbose状态,使之被组织得更清晰易懂
}
1.[...]用来表示一组字符,单独列出:[io] 匹配 'i',或'o'
{
import re
s='tip top'
r=r't[io]p'
a=re.findall(r,s)
print a
[...]如果匹配的是个范围,可以这个写[0-9a-zA-B]表示0到9并a到z并A到B
}
2.^ ⑴不在[]中的字符:[^io] 匹配除了i,o之外的字符
{
import re
s='tip top'
r=r't[^io]p'
a=re.findall(r,s)
}
⑵匹配开头的字符串
{
import re
s='ahello hello'
r=r'^hello'
a=re.findall(r,s)
print a
}
3.$ 匹配后面的字符串
{
import re
s='hello hello'
r=r'hello$'
a=re.findall(r,s)
print a
}
4.[...^...](除了写在开头地方)和[..$...]或[$...]或[...$]这个没有什么作用,只会当作一般字符来处理
5.如果匹配字符串^abc,就会出现问题,因为^是特殊字符
{
import re
s='^abc ^abc ^abc'
r=r'^abc'
a=re.findall(r,s)
print a
}
出现上面问题,可以这样解决,通过一个转义字符
{
import re
剩余8页未读,继续阅读
- 粉丝: 6
- 资源: 10
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 百度Google比拼企业文化:从硬竞争到软竞争.doc
- 华为的企业文化集中体现为它的.doc
- 华为基本法.doc
- 中国企业文化理论创新与实践.ppt
- 惠普文化.doc
- 肯德基企业文化(DOC+2页).doc
- 通用电气的企业文化和管理.doc
- 沃尔玛的企业文化.doc
- 英特尔公司企业文化建设.doc
- 张瑞敏企业文化管理箴言100句.doc
- 中国电信企业文化及人力资源管理变革.doc
- TCL的“合金式”企业文化.docx
- 中国电信企业文化宣贯培训参考教材.doc
- 伦敦的房屋数据集,伦敦房屋价格数据集(包含地址,房型,面积,年龄,售价等)
- 《学术规范与论文写作》课程论文PDF
- 【企业文化分析模型-5】Chatman的组织文化剖面图(OCP).docx