python 正则表达式-使用圆括号指定分组

当使用正则表达式时,一对圆括号可以实现以下任意一个(或者两个)功能:

• 对正则表达式进行分组;

• 匹配子组。

关于为何想要对正则表达式进行分组的一个很好的示例是:当有两个不同的正则表达式 而且想用它们来比较同一个字符串时。另一个原因是对正则表达式进行分组可以在整个正则 表达式中使用重复操作符(而不是一个单独的字符或者字符集)。 使用圆括号进行分组的一个副作用就是,匹配模式的子字符串可以保存起来供后续使用。 这些子组能够被同一次的匹配或者搜索重复调用,或者提取出来用于后续处理。

为什么匹配子组这么重要呢?主要原因是在很多时候除了进行匹配操作以外,我们还想 要提取所匹配的模式。例如,如果决定匹配模式\w+-\d+,但是想要分别保存第一部分的字母 和第二部分的数字,该如何实现?我们可能想要这样做的原因是,对于任何成功的匹配,我 们可能想要看到这些匹配正则表达式模式的字符串究竟是什么。 如果为两个子模式都加上圆括号,例如(\w+)-(\d+),然后就能够分别访问每一个匹配 子组。我们更倾向于使用子组,这是因为择一匹配通过编写代码来判断是否匹配,然后 第 1 章 正则表达式 11 执行另一个单独的程序(该程序也需要另行创建)来解析整个匹配仅仅用于提取两个部 分。为什么不让 Python 自己实现呢?这是 re 模块支持的一个特性,所以为什么非要重蹈 覆辙呢?

正则表达式模式  匹配的字符串
\d+(\.\d*)?  表示简单浮点数的字符串;也就是说,任何十进制数字,后面可以接一个小数点
和零个或 者多个十进制数字,
例如“0.004”、“2”、“75.”等
(Mr?s?\.)?[A-Z][a-z]*[A-Za-z-]+  名字和姓氏,以及对名字的限制(如果有,首字母必须
大写,后续字母小写),全名前可以 有可选的“Mr.”、
“Mrs.”、“Ms.”或者“M.”作为称谓,以及灵活可选的姓氏,
可以有多 个单词、横线以及大写字母

扩展表示法

扩展表示法是以问号开始(?…),它们通常用于在判断匹配之前提供标记,实现一个前视(或 者后视)匹配,或者条件检查。尽管圆括号使用这些符号,但是只有(?P)表述一个 分组匹配。所有其他的都没有创建一个分组。然而,你仍然需要知道它们是什么,因为它们 可能最适合用于你所需要完成的任务。

猜你喜欢

转载自blog.csdn.net/qq_39208536/article/details/81158983