0

有问题的代码:

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)

它似乎不起作用。

4

4 回答 4

2

您可以先从输出中删除换行符,使用out.strip().

于 2012-10-16T09:00:00.440 回答
1

或者你可以跳过任意数量的带星号的前导换行符:

p = re.compile('^\n*' + module + '/(.*)$')
于 2012-10-16T09:10:52.270 回答
1

您可以在模式中使换行符成为可选:

p = re.compile('^\n?' + module + '/(.*)$')

?这里是量词,意思是 0 或 1

请参阅docs.python.org 上的正则表达式章节中的重复内容

于 2012-10-16T09:11:10.543 回答
1

试试这个

p = re.compile('^' + "nacho" + '/(.*)$', re.DOTALL)

IE:

>>> re.findall("(.*)$", myvar, re.DOTALL)
['dfasd\nasdf\nadsfasdgasdgadfga\ndfasdf\nga\ndf\nga\n\n\n', '']

你的问题是'。如果您不告诉它这样做,请不要匹配换行符。

于 2012-10-16T09:17:14.810 回答