正则表达式删除字符串前的字符

时间:2016-07-14 06:07:49

标签: regex

我有这样的文字文件。它有 50万行

  

(' 12',' 9',' 56',' Trojan.Genome.Win32.230770',   ' 04df65889035a471f8346565600841af&#39 ;,   ' 9190953854e36a248819e995078a060e0da2e687&#39 ;,   ' b6488037431c283da6b9878969fecced695ca746afb738be49103bd57f37d4e4&#39 ;,   ' 2015-10-16 00:00:00',' Zillya',' 16',' TROJAN',' trojan .PNG&#39 ;,   ' 2016-01-14 21:35:44');的#1行

     

(' 13',' 3',' 54',' UnclassifiedMalware',   ' 069506a02c4562260c971c8244bef301&#39 ;,   ' d08e90874401d6f77768dd3983d398d427e46716&#39 ;,   ' 78e155e6a92d08cb1b180edfd4cc4aceeaa0f388cac5b0f44ab0af97518391a2&#39 ;,   ' 2015-10-15 00:00:00',' Comodo'' 6',' MALWARE','恶意软件.PNG&#39 ;,   ' 2016-01-14 21:35:44');的#LINE2

我只想将文本文件保存为以下内容:

  

Trojan.Genome.Win32.230770,04df65889035a471f8346565600841af,   9190953854e36a248819e995078a060e0da2e687,   b6488037431c283da6b9878969fecced695ca746afb738be49103bd57f37d4e4   的#1行

     

UnclassifiedMalware,069506a02c4562260c971c8244bef301,   d08e90874401d6f77768dd3983d398d427e46716,   78e155e6a92d08cb1b180edfd4cc4aceeaa0f388cac5b0f44ab0af97518391a2   的#LINE2

我已经尝试了所有我能想到的正则表达式但是它们没有用。

2 个答案:

答案 0 :(得分:0)

由于这是一个以逗号分隔的文件,因此您可以使用正则表达式进行搜索和替换,尽管它不会像在语音编程语言中将字符串拆分一样高效。

<a href='proceed1.php?var=<?php echo $vari;?>' id=btn2 class="btn">Proceed</a>

会找到一个引号,然后捕获所有文本,直到它遇到下一个单引号,然后是逗号和任何尾随空格。

然后,您将重复这一次,每次以逗号分隔的字段重复一次。

看起来有点like this,然后您可以选择要替换回文本的字段。在这种情况下,您只需要字段'([^']*)',\s* \4

是否可以写入,因此未捕获\8\1?当然,使用非捕获\3组。然后,您的替换范围从(?:...)\1。但这足以使其足够灵活,如果您想要包含或排除任何其他字段,只需在替换字段中包含或排除它们即可。

答案 1 :(得分:0)

如果这应该多次完成,可能缺少此解决方案,原因很简单,因为缺少文档。

将正则表达式应用于文件(甚至可能无法保存)对于其他人来说,实际上并不是可重现/可理解的。

我正在提出一个python小脚本,以明确你实际上在做什么。除此之外,您还可以完全控制输出的确切格式,并将其写入等等。

# 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()))