-1

次のような多数のファイルフィードテキストを「クリーンアップ」するスクリプトをPythonで作成しようとしています。

for i in range(1,10):
    number = 1
    cleanText = re.sub('number.','',line).strip() 
    number = number + 1
    print cleanText

ファイルの例は次のとおりです。 1. Hello, World 2. Hello Earth

ここで行う必要があるのは、番号付けとドット、先頭の空白スペースを一気に削除することです。しかし、一体どうすれば最初に単純な変数展開を実行できるのでしょうか?

よろしくお願いします。

4

3 に答える 3

3

あなたのファイル形式があなたが言ったようなものであることが保証されている場合:

1. Hello, World
2. Hello earth

正規表現を使用する必要さえありません。 splitand を使用するだけjoinです。

clean_line = ' '.join(line.split(' ')[1:]).lstrip()

>>> ' '.join("1. Hello, world".split(' ')[1:])
'Hello, world'

または、それでも置換を行いたい場合は、次のreplaceベースのコードが機能する可能性があります。

number = 1
for line in file_handle:
  clean_line = line.replace("%d. " % number, "").lstrip()
  number += 1
于 2013-03-18T20:15:02.847 に答える
2

他の人が言ったように、r"\d"またはなどの任意の数に一致する正規表現を使用する必要がありますr"\d+"。しかし、学習目的のために、ここにあなたが尋ねたことに対する答えがあります。

「変数展開」に最も近い便利な同等物は、文字列フォーマット演算子です。

cleanText = re.sub('%d.' % number, line).strip()

str(number) + '.'同じ効果を達成するために使用することもできます。コードにはさらにいくつかの問題があります。

  • あなたのループは間違っています。繰り返し処理する場合は、手動でrange(1, 10)インクリメントする必要はありません。number

  • あなたはおそらく意味しrange(1, 11)ました。

  • .正規表現の構文では、任意の文字に一致します。あなたが欲しい\.

クリーンアップされたバージョンは次のようになります。

cleanText = line.strip()
for i in xrange(1, 11):
    cleanText = re.sub(r'%d\.', '' , cleanText)
于 2013-03-18T20:11:55.083 に答える
0
import re
fp = open('line','r')
for line in fp:
    pattern = re.match(r'[0-9]*\.(.*)',line)
    if pattern:
        print pattern.group(1)
    else:
        print line
于 2013-03-18T20:24:47.570 に答える