0

Pythonスクリプトでシリアルに出くわすデータをキャプチャしようとしています。ストリームは「#」で終わり、ストリームには文字、数字、その他の多くの特殊文字、および改行を含めることができます。すべての文字をキャプチャし、終了時にファイルに配置したいと思います。ただし、私の re が正しいかどうかはわかりません。は

re.match("[A-Za-z0-9,.$:<>&*=-]", char, re.DOTALL)

すべての文字、数字、文字、および,.$:<>&*=-改行をキャプチャしますか? 出くわした各文字を単純に追加し、それをリストに配置してから、次のようにリストtaファイルを後で書き込むことはできますか:

while 1:
   # must handle 'exceptions' - IE blank data....
   try:
      if s.inWaiting():
         val = s.read(s.inWaiting())
         for char in val:
            if re.match("[A-Za-z0-9,.$:<>&=-]", char, re.DOTALL):
               chunk += char
               print char

            # handle end of stream
            #if char is '#':
            if re.match("#", char):
               f = open('./report', 'w')
               f.write(chunk)
               sys.exit()

現在、私が期待するすべてを取得していますが、結果のファイルには何も含まれていないため、新しい行を取得しているようには見えません...

4

1 に答える 1

1

を使用していますがre.DOTALL、正規表現は実際にはドット演算子を使用していません。7 行目を次のように変更すると、期待どおりに動作するはずです。

if re.match("[A-Za-z0-9,.$:<>&=-]|\n", char):

\r正規表現では単純に無視されるため、*nix ベースと PC ベースの改行エンコーディングの両方で機能します。

于 2012-12-14T08:15:11.497 に答える