首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解正面的前瞻性断言

理解正面的前瞻性断言
EN

Stack Overflow用户
提问于 2014-07-02 04:20:46
回答 3查看 1.4K关注 0票数 0

来自Python3.4.1文档:

(?=...) 积极的前瞻性断言。如果包含的正则表达式(这里由.表示)在当前位置成功匹配,否则失败,则此操作将成功。但是,一旦尝试了包含的表达式,匹配引擎根本就不会推进;模式的其余部分将在断言启动的地方尝试

我正在尝试理解Python中的regex。你能帮我理解第二句,尤其是黑体字吗?任何例子都将不胜感激。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-07-02 04:23:59

环顾四周是零宽度断言.它们不消耗字符串上的任何字符。

要简要地介绍一下文档的粗体部分:

这意味着,在向前看之后,正则表达式引擎从它开始查看的位置返回到字符串上的相同位置。从那里,它可以重新开始匹配..。

重点是:

您可以得到一个零宽度匹配,这是一个不消耗任何字符的匹配。它只匹配字符串中的位置。零宽度点是验证,以查看正则表达式是否可以或不能匹配,以向前看还是从当前位置回看,而不将它们添加到整个匹配中。

票数 6
EN

Stack Overflow用户

发布于 2014-07-02 04:28:17

通常,正则表达式引擎是“消耗”一个字符的字符串,因为它与正则表达式匹配。

如果您使用前瞻性操作符,引擎将只是简单地向前看,而不会在寻找匹配时“消耗”任何字符。

示例

一个很好的例子是一个正则表达式来匹配密码,它需要有一个数字数字,并且长度在6-20个字符之间。

您可以编写两个检查(一个检查数字是否存在,另一个检查字符串长度是否符合要求),或者使用一个正则表达式:

代码语言:javascript
复制
(?=.*\d).{6,20}

第一部分(?=.*\d)检查字符串中是否有数字。当它完成时,我们又回到字符串的开头(我们只是“向前看”),如果它通过了,我们将进入正则表达式的下一部分。

现在,.{6,20}不再是向前看的,而是开始消耗字符串。当整个字符串被消耗时,已经找到了一个匹配项.

票数 2
EN

Stack Overflow用户

发布于 2014-07-02 04:28:57

以一个例子的形式回答。关于字符串"xy"

  • (?:x)将与"x"匹配
  • (?:x)x将不匹配,因为在x之后没有其他x
  • (?:x)y将与"xy"相提并论,通过在xy上前进。
  • (?=x)将在字符串的开头匹配"",因为x如下所示。
  • (?=x)x将与"x"相匹配--它认识到一个x紧随其后,然后它就在它之上前进。
  • (?=x)y将不匹配,因为它肯定有一个x追随者,但随后尝试使用y进行改进。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24522811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档