捕获组与或运算
特征标群是一组写在 (...) 中的子模式。(...) 中包含的内容将会被看成一个整体,和数学中小括号( )的作用相同。
例如,表达式 (ab)* 匹配连续出现 0 或更多个 ab。
如果没有使用 (...) ,那么表达式 ab* 将匹配连续出现 0 或更多个 b。
再比如之前说的 {} 是用来表示前面一个字符出现指定次数。
但如果在 {} 前加上特征标群 (...) 则表示整个标群内的字符重复 N 次。
我们还可以在 () 中用或字符 | 表示或。例如,(c|g|p)ar 匹配 car 或 gar 或 par.
"(c|g|p)ar" => The **car** is **par**ked in the **gar**age.
请注意,特征标群不仅会匹配,而且会捕获,可以在宿主语言中被引用。 宿主语言可以是 Python 或 JavaScript 或几乎任何在函数定义中实现正则表达式的语言。
2.5.1 非捕获组
非捕获组匹配字符但不捕获该组。 一个非捕获组由在括号 (...) 内的一个 ? 后跟一个 : 表示。 例如,正则表达式 (?:c|g|p)ar 和 (c|g|p)ar 类似,可以匹配相同的字符,但不会创建捕获组。
"(?:c|g|p)ar" => The **car** is **par**ked in the **gar**age.
非捕获组用于查找和替换功能,或与捕获组混合以在生成任何其他类型的输出的时候,不记录匹配的内容。 可参考 4. 零宽度断言(前后预查)。
2.6 | 或运算符
或运算符就表示或,用作判断条件。
例如 (T|t)he|car 匹配 (T|t)he 或 car。
"(T|t)he|car" => **The** **car** is parked in **the** garage.