正则表达式从文件中删除某些字符

时间:2016-12-13 16:40:16

标签: python regex character

我想编写一个python脚本来读取包含以下内容的文本文件:

FRAME
  1  J=1,8  SEC=CL1  NSEG=2  ANG=0
  2  J=8,15  SEC=CL2  NSEG=2  ANG=0
  3  J=15,22  SEC=CL3  NSEG=2  ANG=0

输出一个如下所示的文本文件:

1 1 8
2 8 15
3 15 22

我基本上不需要逗号或SEC,NSEG和ANG数据。有人可以帮我使用正则表达式吗?

到目前为止,我有这个:

import re


r = re.compile(r"\s*(\d+)\s+J=(\S+)\s+SEC=(\S+)\s+NSEG=(\S+)+ANG=(\S+)\s")

with open('RawDataFile_445.txt') as a:

# open all 4 files with a meaningful name
file=[open(outputfile.txt","w") 
for line in a:

3 个答案:

答案 0 :(得分:1)

我的建议?由于我不会写很多正则表达式,所以我避免一次性写出大的正则表达式。既然你已经完成了,我会尝试一次验证一小块,如本代码所示。

import re

r = re.compile(r"\s*(\d+)\s+J=(\S+)\s+SEC=(\S+)\s+NSEG=(\S+)+ANG=(\S+)\s")
r = re.compile(r"\s*(\d+)")
r = re.compile(r"\s*(\d+)\s+J=(\d+)")

with open('RawDataFile_445.txt') as a:
    a.readline()
    for line in a.readlines():
        result = r.match(line)
        if result:
            print (result.groups())

第一个正则表达式是你完整的表达方式。下一行是我验证的第一个块。下一行是第二个更大的块。注意稍有变化。

此时我会回去,对原始的整个正则表达式进行修正,然后复制一个更大的块来尝试。并重新运行。

答案 1 :(得分:1)

没有正则表达式:

for line in file:
    keep = []
    line = line.strip()
    if line.startswith('FRAME'):
        continue
    first, second, *_ = line.split()
    keep.append(first)
    first, second = second.split('=')
    keep.extend(second.split(','))
    print(' '.join(keep))

答案 2 :(得分:0)

让我们关注我们要解析的示例字符串:

  1  J=1,8  

我们有空格,数字,更多空格,一些字符,然后是数字,逗号和更多数字。如果我们用正则表达式字符替换它们,我们会得到(\d+)\s+J=(\d+),(\d+),其中+表示我们需要1个或更多该类型。请注意,我们用括号括起数字,以便稍后我们可以使用.groups().group(#)捕获它们,其中#是第n组。