gpt4 book ai didi

python - 非捕获组中的正则表达式捕获组

转载 作者:行者123 更新时间:2023-11-28 18:28:27 26 4
gpt4 key购买 nike

在 Python 中,如何在非捕获组中捕获组?换句话说,如何重复包含捕获组的非捕获子模式?

这方面的一个例子是捕获导入字符串中的所有包名称。例如。字符串:

import pandas, os, sys

将返回“pandas”、“os”和“sys”。以下模式捕获第一个包并获取第二个包:

import\s+([a-zA-Z0=9]*),*\s*

从这里开始,我想重复捕获组并匹配以下字符的子模式,即 ([a-zA-Z0=9]*),*\s* .当我用一个非捕获组包围这个子模式并重复它时:

import\s+(?:([a-zA-Z0=9]*),*\s*)*

它不再捕获内部的组。

最佳答案

您的问题措辞严格是关于正则表达式的,但是如果您愿意使用 recursive descent parser (例如 pyparsing ),许多需要正则表达式专业知识的事情变得非常简单。

例如,这里你要问的变成了

from pyparsing import *

p = Suppress(Literal('import')) + commaSeparatedList

>>> p.parseString('import pandas, os, sys').asList()
['pandas', 'os', 'sys']

>>> p.parseString('import pandas, os').asList()
['pandas', 'os']

这可能是个人品味的问题,但对我来说,

Suppress(Literal('import')) + commaSeparatedList

也比正则表达式更直观。

关于python - 非捕获组中的正则表达式捕获组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39416911/

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