Bootstrap

【正则表达式 PYTHON】

一、什么是正则表达式?

正则表达式是一种用于匹配文本模式的工具。它是一个特殊的字符序列,可以帮助你在文本中查找、替换或验证符合特定规则的字符串。例如,你可以使用正则表达式来检查一个字符串是否是一个有效的电子邮件地址、电话号码,或者从一段文本中提取所有的数字。

在 Python 中,通过re模块来支持正则表达式的操作。

二、re 模块的基本函数

  1. re.match()
    • 功能:尝试从字符串的起始位置匹配一个模式。如果匹配成功,返回一个匹配对象;如果失败,返回None
    • 示例:
import re
text = "Hello, world!"
pattern = "Hello"
match_result = re.match(pattern, text)
if match_result:
    print("匹配成功")
else:
    print("匹配失败")
  • 在这个例子中,re.match()会尝试从text字符串的开头匹配pattern(即 “Hello”),因为文本开头是 “Hello”,所以匹配成功。

  1. re.search()
    • 功能:在整个字符串中搜索第一个匹配给定模式的子串。如果找到,返回一个匹配对象;如果没有找到,返回None
    • 示例:
import re
text = "The quick brown fox jumps over the lazy dog"
pattern = "fox"
search_result = re.search(pattern, text)
if search_result:
    print("找到匹配的子串")
else:
    print("未找到匹配的子串")
  • 这里re.search()会在整个text字符串中查找 “fox”,找到后返回匹配对象。
  1. re.findall()
    • 功能:在字符串中找到所有匹配给定模式的子串,并返回一个列表。如果没有匹配的子串,返回一个空列表。
    • 示例:
import re
text = "apple,banana,cherry"
pattern = "[a - z]+"
findall_result = re.findall(pattern, text)
print(findall_result) 
  • 这个正则表达式[a - z]+会匹配一个或多个连续的小写字母。re.findall()会在text中找到所有符合这个模式的子串,返回一个包含 “apple”、“banana” 和 “cherry” 的列表。
  1. re.sub()
    • 功能:用于在字符串中替换所有匹配给定正则表达式的子串。
    • 示例:
import re
text = "I have 3 apples and 2 bananas"
pattern = "[0 - 9]+"
new_text = re.sub(pattern, "some", text)
print(new_text)
  • 这里re.sub()会将text中所有匹配[0 - 9]+(一个或多个数字)的子串替换为 “some”,最后输出的new_text为 “I have some apples and some bananas”。

三、正则表达式的基本语法

  1. 字符类
    • 方括号[]用于定义字符类。例如,[abc]可以匹配abc中的任意一个字符。
    • 范围表示法:[a - z]可以匹配从az的所有小写字母,[0 - 9]可以匹配所有数字。
  2. 量词
    • *:匹配前面的字符零次或多次。例如,a*可以匹配空字符串、aaaaaa等。
    • +:匹配前面的字符一次或多次。例如,a+可以匹配aaaaaa等,但不能匹配空字符串。
    • ?:匹配前面的字符零次或一次。例如,a?可以匹配空字符串或a
    • {n}:匹配前面的字符恰好n次。例如,a{3}可以匹配aaa
    • {n,}:匹配前面的字符至少n次。例如,a{2,}可以匹配aaaaaaaaa等。
    • {n,m}:匹配前面的字符至少n次且最多m次。例如,a{1,3}可以匹配aaaaaa
  3. 元字符
    • .:匹配除换行符\n之外的任意一个字符。例如,a.b可以匹配aaba0b等。
    • ^:在字符类[]外,用于匹配字符串的开头。例如,^Hello可以匹配以Hello开头的字符串。在字符类[]内,^表示取反。例如,[^abc]可以匹配除abc之外的任意字符。
    • $:用于匹配字符串的结尾。例如,world$可以匹配以world结尾的字符串。
    • \:用于转义字符。例如,\*匹配*字符本身,因为*在正则表达式中有特殊含义。

四、编译正则表达式(可选但高效)

你可以使用re.compile()函数来编译一个正则表达式模式。这在需要多次使用同一个模式进行匹配等操作时非常有用,因为编译后的模式可以提高匹配效率。

示例:

import re
pattern = re.compile("[a - z]+")
text1 = "apple"
text2 = "123"
match_result1 = pattern.match(text1)
match_result2 = pattern.match(text2)
if match_result1:
    print("text1匹配成功")
if match_result2:
    print("text2匹配成功")

在这个例子中,先编译了一个匹配一个或多个小写字母的正则表达式模式。然后用这个编译后的模式分别对text1text2进行匹配操作。

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;