有问题的代码:
out, err = shellcmd.run_get_out(shell_cmd, login_shell=True)
p = re.compile('^' + module + '/(.*)$')
m = p.match(out)
if m:
return m.group(1)
return None
它从一些shell命令获得输出并进行正则表达式匹配。例如:out是'rvct / 4.1_0894 \ n',模块是'rvct',它返回'4.1_0894' 但是在某些系统上,shell命令输出以新行开头,out将为'\ nrvct / 4.1_0894 \ n',我必须进行此更改
p = re.compile('^\n' + module + '/(.*)$')
让它发挥作用
我可以在这两种情况下使用正则表达式吗?我试过了
p = re.compile('^' + module + '/(.*)$', re.MULTILINE)
似乎没有用。
答案 0 :(得分:2)
您可以先使用out.strip()
从输出中删除换行符。
答案 1 :(得分:1)
或者您可以跳过任意数量的带有明星的主要换行符:
p = re.compile('^\n*' + module + '/(.*)$')
答案 2 :(得分:1)
您可以在模式中选择换行符:
p = re.compile('^\n?' + module + '/(.*)$')
?
这里是一个量词,意思是0或1
答案 3 :(得分:1)
试试这个
p = re.compile('^' + "nacho" + '/(.*)$', re.DOTALL)
即:
>>> re.findall("(.*)$", myvar, re.DOTALL)
['dfasd\nasdf\nadsfasdgasdgadfga\ndfasdf\nga\ndf\nga\n\n\n', '']
你的问题是'。'如果你不告诉它,请不要匹配换行符。