python - 正则表达式匹配超过预期

标签 python regex pattern-matching

给出以下 python 脚本:

text = '<?xml version="1.24" encoding="utf-8">'
mu = (".??[?]?[?]", "....")
for item in mu:
    print item,":",re.search(item, text).group()

有人可以解释一下为什么第一次使用正则表达式 .??[?]?[?] 吗?返回 <?而不仅仅是 ? .

我的解释:

  • .??应该不匹配 .?可以匹配或不匹配任何字符,第二个 ?让它不贪心。
  • [?]?可以匹配?或不,所以没有什么是好的,也是
  • [?]正好匹配 ?

这应该导致 ?而不是 <?

最佳答案

同理o*?bar火柴oobarfoobar .即使量词是非贪婪的,正则表达式也会尝试以所有可能的方式从第一个字符开始匹配,然后再继续下一个字符。

首先是 .??匹配一个空字符串,但是当正则表达式引擎回溯到它时,它匹配 < , 从而使正则表达式的其余部分匹配,而不将匹配的起始位置移动到下一个字符。

关于python - 正则表达式匹配超过预期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6589226/

相关文章:

java - 匹配字符串中第一次出现的分号,前提是前面没有 '--'

scala - 为什么空字符串与 Seq.empty 不匹配?

java - 为什么在java中正则表达式的实现中使用魔数(Magic Number)?

php - 正则表达式德国邮政编码

java - 模式匹配出了什么问题?

functional-programming - 为什么在 OCaml 中使用模式匹配

python - 批量插入异常

python - 如何将多个元素作为值附加到字典中

python - 在谷歌应用程序引擎灵活环境中使用stream_with_context在 flask 中加载栏

python - 如何在keras conv层中进行零填充?