📅  最后修改于: 2023-12-03 15:34:12.885000             🧑  作者: Mango
正则表达式是一组匹配规则,通常用于在字符串中搜索和匹配特定的字符模式。正则表达式可以通过组的使用更加灵活和便捷。
正则表达式组是将多个子表达式组合到一个单元中以进行匹配的一种机制。组是由括号括起来的一组子表达式,括号中的表达式可以是任何正则表达式。
组的基本语法为:
(expression)
其中 expression
是任何正则表达式。
组可以在正则表达式中使用以指定一个或多个模式,这些模式可以连续或非连续出现在输入字符串中。使用组进行匹配相对简单,只需将模式分组,并使用分组的括号对匹配到的字符串进行提取。
例如,以下正则表达式将字符串 "Python Python Python"
中的三个 "Python"
单词匹配到组中:
(Python\s){3}
该语法中的 \s
匹配任何空白字符,包括空格、制表符和换行符。括号中的 (Python\s)
表示匹配字符串中的 "Python"
单词,因为 \s
将该单词与空格分隔开。
下面是一个使用组进行匹配和提取的示例。假设有一个输入字符串列表,其中包含了几个人的姓名和电话号码信息。我们需要通过正则表达式来提取电话号码。
首先我们可以使用组的语法来匹配电话号码的模式,如下所示:
(\d{3})-(\d{4})-(\d{4})
其中:
(\d{3})
表示匹配3位数字,(\d{4})-(\d{4})
表示匹配2个4位数字,并用 -
分隔。接下来,我们可以使用 Python 的 re
模块来实现匹配和提取。代码示例如下:
import re
# 定义输入字符串。
strings = [
'John Doe: 555-1234',
'Jane Doe: 555-5678',
'Robert Roe: 555-9999'
]
# 定义正则表达式模式。
regex = r'(\d{3})-(\d{4})-(\d{4})'
# 遍历输入字符串进行匹配和提取。
for s in strings:
match = re.search(regex, s)
if match:
print(f'{match.group(1)}-{match.group(2)}-{match.group(3)}')
在上面的代码中,我们使用了 re.search()
函数对输入字符串进行匹配,并使用 group()
函数对匹配结果进行提取。最终输出结果如下:
555-1234
555-5678
555-9999
在 Python 3.8 及以上版本中,正则表达式还支持命名组的使用。命名组是根据名称而非序号进行引用的组。命名组的语法为:
(?P<name>expression)
其中,name
是组名称,expression
是任何正则表达式。在匹配时,可以通过组名称对匹配结果进行提取。命名组的示例如下:
# 使用命名组进行匹配和提取。
regex = r'(?P<area_code>\d{3})-(?P<prefix>\d{4})-(?P<suffix>\d{4})'
for s in strings:
match = re.search(regex, s)
if match:
print(f'{match.group("area_code")}-{match.group("prefix")}-{match.group("suffix")}')
在上面的代码中,我们使用命名组 (?P<area_code>\d{3})
、(?P<prefix>\d{4})
和 (?P<suffix>\d{4})
来指定每组的名称,然后使用 match.group("name")
的形式提取匹配结果。最终输出结果与上一个示例相同。