0

ファイル内のテキストを一致させようとしています

In [44]: with open(path) as f:
   ....:     for line in f:
   ....:         matched = re.search('^PARTITION BY HASH',line)
   ....:         if matched is not None:
   ....:             print matched.group()
   ....:

ファイルには、PARTITION BY HASH(SOME_THING); のような行が含まれています。また、一致してはならない SUBPARTITION BY HASH(SOME_THING) がある他の行もあります

試合後、その行を削除したいと思います。しかし、印刷のmatched.groupが失敗するのはなぜですか?

4

2 に答える 2

1

このようなもの:

In [29]: strs1="PARTITION BY HASH(SOME_THING)"

In [30]: strs2="SUBPARTITION BY HASH(SOME_THING)"

In [31]: bool(re.match(r"^PARTITION BY HASH",strs1))
Out[31]: True

In [32]: bool(re.match(r"^PARTITION BY HASH",strs2))
Out[32]: False
于 2012-11-06T10:32:07.330 に答える
0

しかし、印刷のmatched.groupは失敗します

それは単純に本来の目的を果たします: マッチを返します。この場合から

>>> import re
>>> line = "PARTITION BY HASH(something)"
>>> re.search('^PARTITION BY HASH', line).group()
'PARTITION BY HASH'

'PARTITION BY HASH'Ashwini Chaudhary の提案に基づいて、で始まる行を印刷する場合:

with open(path) as f:
    for line in f:
        if line.startswith('PARTITION BY HASH'):
            print line,

print が追加の行末文字を挿入するのを防ぐために、コンマに注意してください。

パッケージの使用を主張する場合re

import re

with open(path) as f:
    for line in f:
        if re.match('PARTITION BY HASH', line):
            print line,

re.match開始位置インジケータなしで を使用することに注意してください^(詳細については、 http://docs.python.org/2/library/re.html#search-vs-matchを参照してください)。

于 2012-11-06T10:28:30.180 に答える