有人可以帮我写单个正则表达式从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>]
答案 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}}