0

現在、Python での正規表現によるフィルタリングに苦労しています。私は ssh 経由でコマンドを実行しており、それを stdout でキャッチしています。ここではすべてがうまくいきますが、難しい部分が来ます。stdout にロードされたファイルの出力は次のとおりです。

コマンドは正常に実行されました。server.jvm.memory.maxheapsize-count-count = 518979584

コマンドは正常に実行されました。server.jvm.memory.maxheapsize-count-count = 518979584

(これを複数回)。正規表現を実行するよりも:

stdin, stdout, stderr = ssh.exec_command('cat ~/Desktop/jvm.log')
result = stdout.readlines()
result = "".join(result)
print(result)
line = re.compile(r'\d+\n')
rline = "".join(line.findall(result))
print(rline)

印刷 (rline) の結果は

>> 518979584 

>> 518979584

>> 518979584

(これも複数回)。一度だけ印刷したい。rline[0] を印刷すると、桁全体の最初の数字だけが得られます。$ を使用することを考えましたが、これは役に立ちません。

4

3 に答える 3

2

まあ、これはあなたが望むものを与えるはずです。

(\d+)\D*$

検索を行うだけで、発生した最後の番号が表示されます。

>>> regex = re.compile(r"(\d+)\D*$")
>>> string = "100 20gdg0 3gdfgd00gfgd 400"
>>> r = regex.search(string)
# List the groups found
>>> r.groups()
(u'400',)
于 2013-04-26T09:17:37.620 に答える
1

あなたの行:

rline = "".join(line.findall(result))

返されたリスト形式findallを文字列に変換し、その結果、rline[0]文字列の最初の文字が返されます。

から要素を取得するだけですline.findall(result)[0]

以下の例に示すように

>>> d = '''
     Command get executed successfully. server.jvm.memory.maxheapsize-count-count =     518979584
... 
...     Command get executed successfully. server.jvm.memory.maxheapsize-count-count = 518979584
... '''
>>> d
'\n\n    Command get executed successfully. server.jvm.memory.maxheapsize-count-count    = 518979584\n\n    Command get executed successfully.     server.jvm.memory.maxheapsize-count-count = 518979584\n'
>>> import re
>>> line = re.compile(r'\d+\n')
>>> rline = "".join(line.findall(d))
>>> rline
'518979584\n518979584\n'
>>> line.findall(d)
['518979584\n', '518979584\n']
>>> line.findall(d)[0].strip() # strip() used to remove newline character - may not be needed
'518979584'
于 2013-04-26T09:19:00.170 に答える
0
  • シェルとPythonを混在させることは決して良い考えではありません-Pythonですべてを実行できる場合(あなたの場合のように)
  • 正規表現は不要
  • set()独自性を提供

    with open(<your file name>) as in_file:
        counts = set(line.rpartition(' ')[2] for line in in_file)
    
于 2013-04-26T09:21:19.320 に答える