我的剧本:
#!/usr/bin/env python
import os
import re
def grep(filepath, regex):
regObj = re.compile(regex)
res = []
with open(filepath) as f:
for line in f:
if regObj.match(line):
res.append(line)
return res
print(grep('/opt/conf/streaming.cfg', 'Port='))
假设循环遍历给定文件中的行并匹配提供的正则表达式(如果存在),追加到res
并最终返回res
。
/opt/conf/streaming.cfg
的内容包含一行:
SocketAcceptPort=8003
仍打印[]
怎么回事?
答案 0 :(得分:2)
检查re.match
的文档会给我们第一句话:
如果字符串开头的零个或多个字符匹配
注意关于“字符串开头”的部分?您需要使用不同的re函数来匹配行中的任何位置。例如,match
的文档中的更多内容是此注释:
如果要在字符串中的任何位置找到匹配项,请使用search()代替
答案 1 :(得分:2)
如果您正在寻找端口列表,请不要使用字符串比较:
#!/usr/bin/env python
import os
import re
def grep(filepath, substring):
res = []
with open(filepath) as f:
for line in f:
if substring in line:
res.append(line.rsplit("\n")[0])
return res
print(grep('/opt/conf/streaming.cfg', 'Port='))
给出结果:
['SocketAcceptPort=8003']