【发布时间】:2016-01-16 12:35:59
【问题描述】:
我正在尝试设计一个正则表达式来测试一行是否是标准 Python 导入语句,其中“导入”术语是可选的。例如,
[import] foo
[import] foo.bar
[import] foo.bar as baz
[import] foo, bar
但它不应该匹配:
[from] foo import bar
到目前为止,我有这些,但它们不太好用:
^(import\s+)?.+(?!\s+import\s+).+$
^(import\s+)?.+?(?!\s+import\s+).+$
它们不排除... import ... 样式语句。例如,
>>> re.match(r'^(import\s+)?(.+)(?!\s+import\s+)(.+)$', 'foo import bar').groups()
(None, 'foo import ba', 'r')
>>> re.match(r'^(import\s+)?(.+?)(?!\s+import\s+)(.+)$', 'foo import bar').groups()
(None, 'f', 'oo import bar')
这可以用一个正则表达式完成吗?
注意:我的目标不是解析 import 语句,而只是检测它。我打算用 ast 模块来解析它。
【问题讨论】:
-
“导入”这个词是可选的吗?那么,刚才说
foo的行会被视为导入吗? -
@TigerhawkT3 是的,只有
foo被认为是有效的。