Python 中的正则表达式是一个强大的工具,用于处理字符串,查找、替换、分割等。正则表达式使用特殊语法来表示一系列匹配字符串的字符规则。Python 通过 re
模块提供对正则表达式的支持。
re.search(pattern, string[, flags=0])
Match
对象,其中包含有关匹配的信息,如匹配的文本、位置等。如果没有找到匹配项,则返回None
。search
。# search 返回match 或 none
result = re.search(r"abc", "0bcabcdabcde", re.I) # I 不区分大小写
print(result, result.start(), result.end(), result.group())
# 3 6 abc
re.findall(pattern, string[, flags=0])
findall
。result = re.findall(r"abc", "0bcabcdabcde", re.I)
print(result)
# ['abc', 'abc']
re.finditer(pattern, string[, flags=0])
Match
对象,包含有关匹配的信息。如果没有找到匹配项,则迭代器为空。finditer
。result = re.finditer(r"abc", "0bcabcdabcde")
for data in result:
print(data.group())
# abc
# abc
# \w 匹配字母数字下划线
result = re.sub(r"a\wc", "哈哈哈", "0bcabcda2cde")
print(result)
# 0bc哈哈哈d哈哈哈de
# \d 只匹配数字,不关心字符
result = re.subn(r"a\dc", "哈哈哈", "0bca1cdabcde")
print(result)
# ('0bc哈哈哈dabcde', 1)
# split 返回切割后的内容
result = re.split(r"abc", "0bcabcdabcde", maxsplit=1) #设置最大分割次数
print(result)
#['0bc', 'dabcde']
# \w 匹配字母 数字 下划线 # \W 匹配非字母 非数字 非下划线 # \d 匹配数字 # \D 匹配非数字 # \s 匹配空白 # \S 匹配非空白
result1 = re.findall(r"\w","abc123+-*/_") # 打印
result2 = re.findall(r"\W", "abc123+-*/_")
result3 = re.findall(r"\d","abc123+-*/_")
result4 = re.findall(r"\D","abc123+-*/_")
result5 = re.findall(r"\s","abc123+-*/_")
result6 = re.findall(r"\S","abc123+-*/_")
print(result1,result2,result3,result4,result5,result6)
# 1打印 ['a', 'b', 'c', '1', '2', '3', '_']
# 2打印 ['+', '-', '*', '/']
# 3打印 ['1', '2', '3']
# 4打印 ['a', 'b', 'c', '+', '-', '*', '/', '_']
# 5打印 []
# 6打印 ['a', 'b', 'c', '1', '2', '3', '+', '-', '*', '/', '_']
# . 任意字符 除了\n 除非使用re.M # ^abc abcd\nabcd开头不能匹配\n 除非使用re.M # abc$ 以abc 结尾 不能匹配\n 比如:abc\nadc 结果就一个 abc 除非使用re.M
result1 = re.findall(r".","abc\nabc")
result2 = re.findall(r"^abc","abc\nabc",re.M)
result3 = re.findall(r"a\wc$", "abc\nadc", re.M)
print(result1,result2,result3)
#result1 打印 ['a', 'b', 'c', 'a', 'b', 'c']
#result2 打印 ['abc', 'abc']
#result3 打印 ['abc', 'adc']
# * 代表有>=0 个 # + 代表有>=1 个 # ? 代表有0个或1个
result1 = re.findall(r"\d*", "123456789")
result2 = re.findall(r"\d+", "123456789")
result3 = re.findall(r"\d?", "123456789")
print(result1,result2,result3)
#result1 打印 ['123456789', '']
#result2 打印 ['123456789']
#result3 打印 ['1', '2', '3', '4', '5', '6', '7', '8', '9', '']
{n}
:这个量词用于指定前面的字符或子表达式在匹配时必须恰好出现n
次。
print(re.match(r'a{3}', 'aaa').group()) # 输出: aaa
{m,n}:
这个量词用于指定前面的字符或子表达式在匹配时至少出现m
次,但不超过n
次。如果省略n
,则表示至少出现m
次,没有上限。
print(re.findall(r'a{2,4}', 'aaaaa')) # 输出: ['aaaa', 'a']
[m-n]
:这个字符集(也称为字符类)用于匹配方括号内的任一字符。
# 使用[m-n](注意这里只是示例字符集,并非直接m到n的范围)
print(re.match(r'[a-z]', 'b').group()) # 输出: b
|:这个操作符称为“或”操作符,用于匹配两个或多个表达式中的任意一个。示例:a|b 匹配a或b。 示例:(a|b)c 匹配ac或bc。
# 使用|
print(re.search(r'a|b', 'cab').group()) # 输出: a
():圆括号在正则表达式中有多种用途,但最常见的用途之一是分组。分组可以让我们将表达式的一部分作为一个整体来引用或处理。示例:(abc)* 匹配零个或多个abc。 分组还允许我们通过反向引用(\1, \2...)来引用之前的分组。 示例:(\w+)\s+\1 匹配如 hello hello 这样的重复单词序列(\1引用第一个分组匹配的内容)。
# 使用()
print(re.findall(r'(\w+)\s+\1', 'hello hello world')) # 输出: ['hello']