6

我无法理解这些正则表达式是如何工作的以及何时使用它们。我还没有在 python 网站上找到这些正则表达式的具体示例。我知道 sed awk 但在那里没有使用过这些类型的正则表达式

(?=...)
(?<=...)
(?(id/name)yes-pattern|no-pattern)
4

1 回答 1

14

(?=...)是一个积极的前瞻断言。如果?=当前位置匹配后有括号中的部分,则匹配,但不会为匹配消耗任何字符。例如,正则表达式a(?=b)将匹配 ana后跟 a b,但不会将 theb作为匹配的一部分返回。

(?<=...)是一样的,但看 后面,即向后看。同样,它不消耗任何东西。

(?(id/name)yes-pattern|no-pattern)有条件的。如果命名组 id/name匹配,则字符串此时必须匹配yes-pattern,否则no-pattern.

不过,老实说,这些都是相当高级的功能,我不记得曾经使用过条件。Lookaround 更为常见,但经常受到正则表达式引擎的限制,例如,在许多情况下,lookbehind 只能使用固定长度的字符串来完成。

于 2013-02-01T13:06:47.687 回答