2016-07-14 3 views
-2

나는 이와 같은 텍스트 파일을 가지고 있습니다.문자열 앞에있는 문자를 삭제하는 정규식

('12', '9', '56', 'Trojan.Genome.Win32.230770' '04df65889035a471f8346565600841af' '9190953854e36a248819e995078a060e0da2e687' : 그것은 이상 500,000 라인을 갖는다 'zillya', '16', 'TROJAN', 'trojan.png', '2016-01-14 21:35:44') 'b6488037431c283da6b9878969fecced695ca746afb738be49103bd57f37d4e4', '2015-10-16 00:00:00' ; # 호선

('13', '3', '54', 'UnclassifiedMalware' '069506a02c4562260c971c8244bef301' 'd08e90874401d6f77768dd3983d398d427e46716' '78e155e6a92d08cb1b180edfd4cc4aceeaa0f388cac5b0f44ab0af97518391a2' '2015년 10월 15일 00:00 : 00 ','Comodo ','6 ','MALWARE ','malware.png ', '2016-01-14 21:35:44 '); # 2 호선 I는이 같은으로 텍스트 파일을 유지하려는

:

Trojan.Genome.Win32.230770, 04df65889035a471f8346565600841af, 9190953854e36a248819e995078a060e0da2e687, b6488037431c283da6b9878969fecced695ca746afb738be49103bd57f37d4e4 # 입력란 1

분류되지 않은 하드웨어, 069506a02c4562260c971c8244bef301, 012 3,516,d08e90874401d6f77768dd3983d398d427e46716, 78e155e6a92d08cb1b180edfd4cc4aceeaa0f388cac5b0f44ab0af97518391a2 #의 2 호선은

나는 내가 생각할 수있는 정규식을 모두 시도했지만 그들은 작동하지 않았다.

+3

쉼표로 구분 된 구조로되어있어 필요하지 않은 셀을 제거하지 않는 이유는 무엇입니까? – User1234

+0

어떤 엔진/개발 환경입니까? –

+0

@ User1234 이것은 파일의 처음 두 줄에 불과합니다. 이 파일에는 실제로 50 만 개가 넘는 행이 있습니다! – Viettungvuong

답변

0

여러 번 수행해야하는 경우 문서가 부족하기 때문에이 솔루션이 부족할 수 있습니다.

정규식을 파일에 적용하면 (어쩌면 저장하지 않은 것일 수도 있습니다.) 다른 사람들에게는 실제로 재현 가능하거나 이해할 수 없습니다.

저는 여러분이 실제로하고있는 일을 분명히하기 위해 파이썬 작은 스크립트를 제안하고 있습니다. 출력의 정확한 형식을 완벽하게 제어 할 수 있습니다.

# get regex module 
import re 

filename = 'path/to/your/file.txt' 

# open file 
with open(filename) as file_handle: 
    for line in file_handle: 
     # remove trailing whitespace 
     line = line.strip() 

     # if line is empty forget about it 
     if not line: 
      continue 

     # split into comment part and data part 
     data, comment = line.split(';') 

     # transform into comma seperated values 
     # aka. remove whitespace, parentheses, quotes 
     data = re.sub(r'\s|\(|\)|\'', '', line) 

     # file is build up like this (TODO: make names more logical) 
     nr1, nr2, nr3,               \ 
     name,                 \ 
     hash1, hash2, hash3,             \ 
     first_date, discoverer, nr4,           \ 
     category, snapshot_file, last_date = data.split(',') 

     # print, or possibly write 
     print("{name:}, {hash1:}, {hash2:}, {hash3:} {comment:}".format(**locals())) 
+0

이제 C++로 작성하는 것에 대한 여러분의 의견을 읽으십시오. 비슷한 것은 물론 그 언어에서도 가능합니다. –

0

쉼표로 구분 된 파일이므로 정규 표현식을 사용하여 검색 및 바꾸기가 가능하지만 프로그래밍 언어로 문자열을 분할하는 것만 큼 효율적이지는 않습니다.

'([^']*)',\s* 

는, 작은 따옴표를 찾을 수는 쉼표와 후행 공백 다음에 다음에 따옴표를 만날 때까지 모든 텍스트를 캡처합니다.

그런 다음 쉼표로 구분 된 각 필드에 대해 한 번씩 반복하십시오.

약간 like this으로 보일 것입니다. 그런 다음 텍스트로 대체 할 필드를 선택할 수 있습니다. 이 경우 \4부터 \8까지만 입력하면됩니다.

\1부터 \3까지 기록 할 수 있습니까? 확실히, 비 캡처 (?:...) 그룹을 사용하십시오. 그러면 대체 번호는 \1에서 \5까지입니다. 그러나 이렇게하면 다른 필드를 포함하거나 제외하려는 경우 대체 필드에서 필드를 포함 시키거나 제외시키는 것만 큼 간단하게 유연하게 처리 할 수 ​​있습니다.

+0

하지만 메모장에서 어떻게 할 수 있습니까 + +? – Viettungvuong

+0

[패턴의 추가 공백]을 제거하십시오 (https://regex101.com/r/uG5tN7/2). 이것이 Notepad ++ (또는 다른 엔진/편집기/언어)에 있음을 알면 앞을 알기에 도움이되므로 특정 응답으로 응답을 작성할지 여부를 알 수 있습니다. – OnlineCop

관련 문제