gpt4 book ai didi

python - 在特定位置匹配

转载 作者:太空宇宙 更新时间:2023-11-03 14:54:23 24 4
gpt4 key购买 nike

这是 this question 的后续(虽然不是我问的)。试图回答,我遇到了几个问题。

考虑字符串 strings123[abc789<span>123</span>def<span>456</span>000]strings456 ,如何匹配方括号中没有被 span 中的 Python 标签包围的数字(使用较新的 regex 模块)?
在示例字符串中,这将是 789000


我正在摆弄像 ( demo )

这样的 \G
(?:\G(?!\A)|\[)
[^\d\]]*
\K
\d+

(*SKIP)(*FAIL) ( demo ):

<span>.*?</span>(*SKIP)(*FAIL)
|
\d+

但无法将两者结合起来 statements :

<span>.*?</span>(*SKIP)(*FAIL)
|
(?:
(?:\G(?!\A)|\[)
[^\d\]]*
(\d+)
[^\d\]]*
\K
)

如何做到这一点?

最佳答案

我喜欢 PyPi regex module 的一个原因是它支持无限宽度后视:

  • Variable-length lookbehind

       A lookbehind can match a variable-length string.

>>> import regex
>>> s = 'strings123[abc789<span>123</span>def<span>456</span>000]strings456'
>>> rx = r'(?<=\[[^][]*)(?:<span>[^<]*</span>(*SKIP)(?!)|\d+)(?=[^][]*])'
>>> regex.findall(rx, s)
['789', '000']
>>>

图案细节:

  • (?<=\[[^][]*) - 在当前位置的左侧必须有一个 [ 后跟零个或多个 ][ 以外的字符
  • (?: - 非捕获组开始
    • <span>[^<]*</span>(*SKIP)(?!) - 匹配 <span> ,然后是 < 以外的 0+ 个字符(带有 [^<]* 否定字符类),然后是 </span> 并在匹配结束位置丢弃匹配,继续寻找下一个匹配
    • | - 或
    • \d+ - 1 位以上
  • (?=[^][]*]) - 除了 ] 和紧靠当前位置右侧的 ] 之外,在零个或多个字符之后必须有一个 [

关于python - 在特定位置匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43758974/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com