grep -v와 동등한 파이썬은 무엇입니까?

grep -v를 좋아합니다. 나는 항상 그것을 사용합니다. 하지만 저는 또한 파이썬으로 텍스트 처리를하고 있는데 중요한 것이 하나 있습니다.

보통 저는 grep -v를 사용하여 불필요한 것들을 제거합니다. 본문.

예를 들어

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

하지만 파이썬에서 정규식의 보완을 어떻게 일치시킬 수 있습니까? 예를 들어 \w?

댓글

답변

정규식 Python에서 search 또는 match 메서드는 Match 객체 또는

. 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])  

댓글

  • +1 코멘트의 SO 링크는 부정적 예측 주장을 언급하지만 솔직히 말해서 귀하의 스 니펫이 훨씬 더 현명하고 우아하다고 생각합니다. 감사합니다.
  • [^ az]를 사용하여 집합 [az]의 보완 요소와 일치시킬 수도 있습니다.

답변

[^ 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  

댓글

  • 같지 않습니다. grep -v '[a-z]'는 " 범위에있는 문자가 포함 된 모든 줄을 제외 함을 의미합니다. a에서 z "까지하지만 ' 구현 된 grep '[^a-z]'는 " iv의 범위에 아니라 문자가 포함 된 모든 행을 포함 함을 의미합니다. id = “d18563eb6f”>

z. " 라인에 abc123 그러면 쿼리가 잘못 인쇄됩니다. 1는 해당 기준을 충족합니다. grep -v '[a-z]'a가 부정 기준을 충족하므로이 행을 인쇄하지 않습니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다