web-dev-qa-db-ja.com

python grep -vと同等)とは何ですか?

grep -vが好きです。いつも使っています。しかし、Pythonでテキスト処理も行っています。欠けている重要なことが1つあります。

通常、私はgrep -vを使用して、テキストから不要なものを削除します。

例えば、

$ grep -v '[a-z]'
# (I manually review this output to confirm that I don't want those lines)

$ grep '[a-z]' > linesiwanted

しかし、Pythonで正規表現の補集合をどのように一致させるのですか?たとえば、\w

14
ixtmixilix

Pythonの正規表現は、searchまたはmatchメソッドのいずれかで、MatchオブジェクトまたはNoneを返します。ために grep -v同等、あなたが使うかもしれません:

import re
for line in sys.stdin:
    if re.search(r'[a-z]', line) is None:
        sys.stdout.write(line)

またはもっと簡潔に:

import re; sys.stdout.writelines([line for line in sys.stdin if re.search(r'[a-z]', line) is None])
18
Arcege

[^ a-z]を使用してgrep -v [a-z]を意味することができることがわかりました。

私はそれを次のように使用しています:

#!/usr/bin/env python
# coding=UTF-8

import sys, re

for file in sys.argv[1:]:
    f = open(file)
    string = f.read()
    regex = re.compile('[^a-z]')
    subs = regex.sub('', string)
    f.close()
    print subs
1
ixtmixilix