2

私はこのコードを持っています

site = hxs.select("//h1[@class='state']")
mydata = site.select("string()").extract()
cleaned_mydata = re.sub(ur'(\s)\s+', ur'\1', mydata[0], flags=re.MULTILINE + re.UNICODE)

        log.msg(str(mydata),level=log.ERROR)
        log.msg(str(cleaned_mydata),level=log.ERROR)

最初の出力は

エラー:[u'\ r \ n 212 \ r \nxxxxにphpを含むジョブ\r\ n']

他の出力は

xxxxxxにphpを含むジョブ

正規表現も212数値を削除しています。どうすれば修正できますか

4

1 に答える 1

1

問題は、この正規表現が最初に見つけた空白を残し、後続のものだけを削除することです。

この意味は

u'\r\n 212\r\n jobs containing php in xxxx \r\n '

になる

u'\r212\rjobs containing php in xxxx '

これを印刷すると、212が印刷され、キャリッジ リターンでカーソルが最初の列に戻りjobs...ます212

これにより、次の 2 つの疑問が生じます。

  • バイナリ モードでテキスト ファイルを読み取っているように見えます (それ以外の場合はs\r\nに正規化され\nます)。なぜですか?
  • 正規表現がこのように機能することを本当に望んでいますか?

編集:

だから、あなたのコメントによると、あなたはしたいです

  • 先頭と末尾の空白を完全に取り除く
  • 複数の連続する空白文字を単一のスペース (ASCII 32) に圧縮します。

次に使用します

cleaned_mydata = re.sub(r'\s+', ' ', mydata[0].strip())
于 2012-11-22T06:53:38.853 に答える