如何使正则表达式与普通字符串和字符串兼容,以换行符开头

时间:2012-10-16 08:53:34

标签: python regex

有问题的代码:

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 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

或者您可以跳过任意数量的带有明星的主要换行符:

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

答案 2 :(得分:1)

您可以在模式中选择换行符:

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

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

请参阅repeating things in the regex chapter on docs.python.org

答案 3 :(得分:1)

试试这个

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

即:

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

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