正则表达式解析python中的import语句

时间:2017-07-08 16:43:03

标签: python regex

有人可以帮我写单个正则表达式从python源代码行获取模块吗?

from abc.lmn import pqr
from abc.lmn import pqr as xyz
import abc
import abc as xyz

它有3个子部分

[from(\s)<module>(\s)] --> get module if this part exist
import(\s)<module>     --> get module
[(\s)as(\s)<alias>]    --> ignore if this part exist

类似这样的事情

:?[from(\s)<module>(\s)]import(\s)<module>:?[(\s)as(\s)<alias>]

2 个答案:

答案 0 :(得分:8)

使用内置的python库而不是使用正则表达式可能是一种更好的方法。 https://docs.python.org/2/library/ast.html您可以使用它来解析python语法。

public class JsonParser extends AsyncTask<Void,String,JsonObject>{
doInBackground(String url){
..........
.....  }
 postExecute(Jobject jobj){
......
return data;
}
}

这将为您提供[&#39; abc.lmn&#39;,&#39; abc&#39;]如果您想提取其他信息,则相当容易调整。

答案 1 :(得分:2)

看起来您可以将中选择,并在导入 同时忽略

(?m) # Modifiers: multi-line ^ # Beginning of line (?: # Optional from from [ ]+ ( \S+ ) # (1), from <module> [ ]+ )? import [ ]+ # Required import ( \S+ ) # (2), import <module> [ ]* $ # End of line

https://regex101.com/r/fmoAuh/1

解释

(?m)^(?:from[ ]+(\S+)[ ]+)?import[ ]+(\S+)(?:[ ]+as[ ]+\S+)?[ ]*$

或者,如果您想将匹配为但不想捕获任何内容,请使用此选项。

(?m) # Modifiers: multi-line ^ # Beginning of line (?: # Optional from from [ ]+ ( \S+ ) # (1), from <module> [ ]+ )? import [ ]+ # Required import ( \S+ ) # (2), import <module> (?: # Optional as [ ]+ as [ ]+ \S+ # <alias> )? [ ]* $

https://regex101.com/r/xFtey5/1

扩展

{{1}}