如何通过python中的启动来捕获组捕获?

时间:2016-08-12 08:53:56

标签: python regex

我正在使用python2.7,我想通过导入“os”,“ma”捕获所有模块名称 所以我使用re模块中的常规表达式来执行此操作。我创建了一个测试字符串:

testString = "import os, math, string"

我在这里使用正则表达式:

import re
pattern = re.compile(r"^import\s+(\w,\s*)*(\w+)")
pattern.findall(testString)

这给了我[('math,','string')],但没有os,所以我尝试使用搜索方法。

p.search(a).groups()

这给我的结果与findall相同。

p.search(a).group(0)

给我'import os, math, string'

如何通过正则表达式获取模块名称“os”?

3 个答案:

答案 0 :(得分:1)

import os, math, string字符串似乎以import开头,因此,您只需检查字符串是否以import开头,然后将其删除并与{{1}分开}:

,

请参阅Python demo

如果逗号和包之间的空格使用不一致,请使用

testString = "import os, math, string"
if testString.startswith("import "):
    print(testString[7:].split(', '))
# = > ['os', 'math', 'string']

请参阅another Python demo

答案 1 :(得分:1)

testString = "import os, math, string"
re.findall(r"\b(\w+)(?:,|$)", testString)

输出结果为:

['os', 'math', 'string']

答案 2 :(得分:0)

您输错了:使用\w+代替\w

pattern = re.compile(r"^import\s+(\w+,\s*)*(\w+)")

但主要问题是:re模块不支持重复捕获(regex支持它)

>>> m = regex.match("^import\s+(\w+,\s*)*(\w+)", testString)
>>> m.captures(1)
['os, ', 'math, ']

如果您想使用regex,则应先安装它。 它不是标准库的一部分。

但在这种情况下使用findall会更好,就像@akash_karothiya建议的那样。