Note Chapter 8 Regular Expressions

正则表达式通常称为模式,是一种表达式,用于指定特定目的所需的一组字符串。指定有限字符串集的简单方法是列出其元素或成员。但是通常有更简洁的方法来指定所需的字符串集。

正则表达式介绍

在使用正则表达式库之前,必须将其导入程序。 最简单的正则表达式库最简单的用法是 search () 函数。

re模块

import re

  • Python 附带的 "re "模块,主要用于字符串搜索和操作

  • 还经常用于网页 "抓取"(从网站上提取大量数据) 我们将从这个简单的练习开始表达式教程,使用表达式 (w+) 和 (^)。

rstrip()方法

Python rstrip() 删除 string 字符串末尾的指定字符,默认为空白符,包括空格、换行符、回车符、制表符。 同理,lstrip()删除左边,strip()删除的两边。

re.search方法

re.search 扫描整个字符串并返回第一个成功的匹配。

函数语法: re.search(pattern, string, flags=0)

# Program
# Search for lines that contain 'is' 
import re 
hand = open('myfile.txt') 
for line in hand: 
    line = line.rstrip() 
    if re.search('is', line): 
        print(line)
This is line 1
This is line 2
This is line 3
This is line 4
This is line 5
This is line 6
This is line 7
This is line 8
This is line 9
This is line 10

当我们在搜索字符串中添加特殊字符时,正则表达式的威力就体现出来了,这些特殊字符可以让我们更精确地控制哪些行与字符串匹配。在正则表达式中添加这些特殊字符后,我们只需编写很少的代码,就能进行复杂的匹配和提取。例如,在正则表达式中,“^”用于匹配一行的 “开头”。我们可以修改程序,只匹配 “is ”位于行首的行,如下所示:

# Program
# Search for lines that start with 'is' 
import re 
hand = open('myfile.txt')
for line in hand: 
    line = line.rstrip() 
    if re.search('^is', line): 
        print(line) 

re.match函数

re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match() 就返回 none。 函数语法: re.match(pattern, string, flags=0)

# Program
#!/usr/bin/python
import re
 
line = "Cats are smarter than dogs"
 
matchObj = re.match( r'(.*) are (.*?) .*', line, re.M|re.I)
 
if matchObj:
   print("matchObj.group() : ", matchObj.group())
   print("matchObj.group(1) : ", matchObj.group(1))
   print("matchObj.group(2) : ", matchObj.group(2))
else:
   print("No match!!")

re.match与re.search的区别

re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。

findall方法

在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果有多个匹配模式,则返回元组列表,如果没有找到匹配的,则返回空列表。 注意: match 和 search 是匹配一次 findall 匹配所有。 语法格式为: findall(string[, pos[, endpos]])

# Program
import re
text='NIIT 1234 a'
data = re.findall("[a-z]+",text)
print(data)
['a']
# Program
import re
text='NIIT 1234 a'
data = re.findall("[A-Za-z]+",text)
print(data)
['NIIT', 'a']

re.sub()方法

Python 的 re 模块提供了re.sub用于替换字符串中的匹配项。 语法: re.sub(pattern, repl, string, count=0, flags=0) 参数:

  • pattern : 正则中的模式字符串。

  • repl : 替换的字符串,也可为一个函数。

  • string : 要被查找替换的原始字符串。

  • count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。

# Program
import re
txt='abc edf ahs'
txt=re.sub('a','mou',txt,count=0)
print(txt)
moubc edf mouhs

re.split()方法

split 方法按照能够匹配的子串将字符串分割后返回列表,它的使用形式如下: re.split(pattern, string[, maxsplit=0, flags=0])

  • pattern 匹配的正则表达式

  • string 要匹配的字符串。

  • maxsplit 分隔次数,maxsplit=1 分隔一次,默认为 0,不限制次数。

  • flags 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。

# Program
import re
txt='as,dq.ad,'
txt=re.split(r"\W",txt)
print(txt)
['as', 'dq', 'ad', '']

正则表达式(RE)语法

元字符

w+ 和 ^ 表达

  • "^": 该表达式匹配字符串的开头

  • "w+": 该表达式匹配字符串中的字母数字字符 下面我们将举例说明如何在代码中使用 w+ 和 ^ 表达式。

# Program
import re 
xx = "Math100,education is fun" 
r1 = re.findall(r"^\w+",xx) 
print(r1) 
['Math100']

\字符

将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如,'n' 匹配字符 "n"。'\n' 匹配一个换行符。序列 '\' 匹配 "" 而 "(" 则匹配 "("。

$字符

匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 '\n' 或 '\r' 之前的位置。

\D与\d字符

\d 匹配一个数字字符。等价于 [0-9]。 \D 匹配一个非数字字符。等价于 [^0-9]。

Last updated