我正在使用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”?
答案 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']
答案 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建议的那样。