正则表达式匹配多个字符串

正则表达式匹配多个字符串

在日常开发中,经常会遇到需要匹配多个字符串的情况,而正则表达式正是能够应对这种情况的利器。在本文中,我们将学习如何使用正则表达式匹配多个字符串。

使用括号表达多个选择

正则表达式中的括号 () 可以表示多个选项,其中每个选项用竖线 | 分隔。例如,下面的正则表达式能够匹配字符串 “apple”、”banana” 或者 “orange”:

(apple|banana|orange)

我们可以使用 Python 代码测试一下上述正则表达式:

import re

pattern = r"(apple|banana|orange)"
text = "I like apple, do you like banana or orange?"

result = re.findall(pattern, text)
print(result)  # 输出 ['apple', 'banana', 'orange']

可以看到,上述代码输出了字符串中所有匹配上的子串。由于我们使用了括号表达多个选择,每个选择都是可选的,因此可以匹配多个字符串。

使用方括号表达多个字符

除了可以使用括号表达多个字符串选择,还可以使用方括号 [] 表达多个字符的选择。在方括号中,每个字符代表一种选择,多个字符之间用逗号 , 分隔。例如,下面的正则表达式能够匹配字符串 “apple”、”banana” 或者 “orange”:

[aob]pple

代码实现如下:

import re

pattern = r"[aob]pple"
text = "I like apple, do you like banana or orange?"

result = re.findall(pattern, text)
print(result)  # 输出 ['apple', 'orange']

可以看到,正则表达式 [aob]pple 匹配了字符串中 “apple” 和 “orange” 这两个子串。使用方括号表达式可以在匹配时更加灵活。

表达子字符串的重复

在正则表达式中,通过使用特定的符号来表达子字符串的出现次数,常见的包括 *+? 以及花括号 {}

  • * 表示匹配零次或多次,等价于 {0,}
  • + 表示匹配一次或多次,等价于 {1,}
  • ? 表示匹配零次或一次,等价于 {0,1}
  • {m} 表示匹配恰好 m 次;
  • {m,} 表示匹配至少 m 次;
  • {m,n} 表示匹配 m 到 n 次。

例如,下面的正则表达式能够匹配多个 “a”:

a*

Python 实现如下:

import re

pattern = r"a*"
text = "aaabbbaaa"

result = re.findall(pattern, text)
print(result)  # 输出 ['', 'aaa', '', '', '', 'aaa', '']

可以看到,正则表达式 a* 匹配了字符串中所有的 “a”,连续出现的 “a” 可以被匹配多次。

再看一个例子,下面的正则表达式能够匹配一个字母后跟着一个数字:

[a-z]\d

Python 实现如下:

import re

pattern = r"[a-z]\d"
text = "c3h5oh"

result = re.findall(pattern, text)
print(result)  # 输出 ['c3', 'h5']

可以看到,正则表达式 [a-z]\d 匹配了字符串中所有的 “c3” 和 “h5″。

使用圆括号提取匹配结果

在正则表达式中,可以使用圆括号 () 将一个子表达式分组,分组后的子表达式可以作为一个整体进行操作,例如提取匹配的结果。

例如,下面的正则表达式可以匹配形如 “xxx年xx月xx日” 这样的日期格式,并通过分组提取年、月、日:

(\d{4})年(\d{1,2})月(\d{1,2})日

Python 实现如下:

import re

pattern = r"(\d{4})年(\d{1,2})月(\d{1,2})日"
text = "今天是2022年9月24日"

result = re.search(pattern, text)
print(result.group(0))  # 输出 2022年9月24日
print(result.group(1))  # 输出 2022
print(result.group(2))  # 输出 9
print(result.group(3))  # 输出 24

可以看到,正则表达式 (\d{4})年(\d{1,2})月(\d{1,2})日 提取了字符串中的年、月、日,并且可以通过 group() 方法分别获取到每个分组的匹配结果。在实际应用中,通过圆括号分组可以方便地提取匹配结果,提高代码的灵活性和效率。

操作字符串的边界

在正则表达式中,可以使用特殊字符 ^$ 表示字符串的开头和结尾。例如,下面的正则表达式能够匹配以 “apple” 开头的字符串:

^apple

Python 实现如下:

import re

pattern = r"^apple"
text = "apple is a fruit, banana is also a fruit"

result = re.findall(pattern, text)
print(result)  # 输出 ['apple']

可以看到,正则表达式 ^apple 匹配了字符串中的 “apple”,但没有匹配 “banana”,因为 “banana” 不是以 “apple” 开头的。

另外,如果想要匹配以特定字符结尾的字符串,可以使用 $ 符号。例如,下面的正则表达式能够匹配以 “.jpg” 结尾的字符串:

.jpg$

Python 实现如下:

import re

pattern = r"\.jpg$"
text = "image1.jpg, image2.png, image3.jpg"

result = re.findall(pattern, text)
print(result)  # 输出 ['.jpg', '.jpg']

可以看到,正则表达式 \.jpg$ 只匹配了字符串中以 “.jpg” 结尾的子串,即 “image1.jpg” 和 “image3.jpg”。

总结

本文介绍了如何使用正则表达式匹配多个字符串,包括使用括号表达多个选择、使用方括号表达多个字符、表达子字符串的重复、使用圆括号提取匹配结果和操作字符串的边界。在实际开发中,合理使用正则表达式可以大大提升代码的灵活性和效率。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程