使用python从列表中提取满足一定条件的单词



我正在尝试从满足某些条件的列表中提取单词。它应该读取每行,如果该行以")"在这一行中,它应该从"。"one_answers";";空格和结束符

我知道我不能使用startwith和endwith函数,因为没有特定的以开头的单词。这就是为什么我使用relibrary,但是,我的脚本仍然没有执行。

import re
data = ["int k = b.k(parcel)",
"int k = kon(parcel)",
"int a", 
"int bds",
"obtain.appendFrom(parcel, dataPosition2, readInt2)",
"obtain desFrom(package, dataPosition2, readInt2)",
"int abd(callme)",
"int.dbd(callyou)",
"int throw new UnsupportedOperationException(you)",
"int throw new.UnsupportedOperationException(me)"]
for i in data:
para = re.findall(r"*[ .]s(w+)s*[)]" ,i) # start from space and dot and endwith ")"
i = i.replace(para,"function_call")

for i in data:
print(i)
我希望输出如下:

int k = b.function_call(parcel)
int k = function_call(parcel)
int a 
int bds
obtain.function_call(parcel, dataPosition2, readInt2)
obtain function_call(package, dataPosition2, readInt2)
int function_call(callme)
int.function_call(callyou)
int throw new function_call(you)
int throw new.function_call(me)

使用re.sub使用regexp来替换一个段。您不能首先使用findall的返回值作为str.replace的参数,并且执行i = i.replace(...)将不会修改列表中的i(因为字符串是不可变的)。

那么,这里有一个版本,它使用列表推导对所有字符串运行一个regexp替换,从而产生一个新的列表:

import re
data = [
"int k = b.k(parcel)",
"int k = kon(parcel)",
"int a",
"int bds",
"obtain.appendFrom(parcel, dataPosition2, readInt2)",
"obtain desFrom(package, dataPosition2, readInt2)",
"int abd(callme)",
"int.dbd(callyou)",
"int throw new UnsupportedOperationException(you)",
"int throw new.UnsupportedOperationException(me)",
]
fixed_data = [
re.sub(r"(w+)s*(", "function_call(", i)
for i in data
]
for i in fixed_data:
print(i)

最新更新