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

いくつかのシェル コマンドから出力を取得し、正規表現の一致を行います。例: out は 'rvct/4.1_0894\n' でモジュールは 'rvct' の場合、'4.1_0894' が返されますが、一部のシステムでは、シェル コマンドの出力が改行で始まり、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)

すなわち:

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

あなたの問題は、「。」実行するように指示しない場合は、改行を一致させないでください。

于 2012-10-16T09:17:14.810 に答える