좋아요 grep -v
. 나는 항상 그것을 사용합니다. 하지만 저는 Python으로 일부 텍스트 처리도 수행하고 있는데 중요한 한 가지를 놓치고 있습니다.
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
?의 보수입니다.
답변1
Python의 정규식은 search
or 메소드에 관계없이 or 객체 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])
답변2
[^az] 만 사용할 수 있는 것으로 나타났습니다 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