【问题标题】:Regular expression to match quasi import statement正则表达式匹配准导入语句
【发布时间】: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 被认为是有效的。

标签: python regex


【解决方案1】:

在尝试了negative lookahead assertion not working in python的正则表达式后,我能够得到一个正则表达式来匹配[import] ...并忽略[from] ... import ...

^(import\s)?(?!.+\simport\s)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-27
    • 1970-01-01
    • 1970-01-01
    • 2013-09-13
    • 2020-08-26
    • 2012-04-15
    • 1970-01-01
    相关资源
    最近更新 更多