使用Python在模式之间刮取数据

时间:2017-10-02 21:42:03

标签: python regex

我有一个数据集,我想抓住数据的某些方面。对于第一行和第一个单词,如果它等于regex = re.compile(r'\A([A-Z][a-z][A-Z]\w*[-]\w*')。我如何在行(破折号)之间刮取数据并将数据保留在行中并删除不等于“正则表达式”的标识符的数据。

例如:我希望将数据保留在AbD000000-10DeD000000-10内,而不是888888-10

-------------------------------------------------------------------------------

AbD000000-10
Issue 1  
Issue 2          Q             Q            Q 
ID: 2             MsEhdiehsla2 MsEhasdhsla2  hiGndiehsla2
ID: 3 

-------------------------------------------------------------------------------
888888-10
         Q             Q            Q 
ID: 2             MsEhdiehsla2 MsEhasdhsla2  hiGndiehsla2
ID: 3 

-------------------------------------------------------------------------------
DeD000000-10
Issue 1  
Issue 2          Q             Q            Q 
ID: 2             MsEhdiehsla2 MsEhasdhsla2  hiGndiehsla2
ID: 3 

-------------------------------------------------------------------------------

我希望看到我的输出看起来像:

-------------------------------------------------------------------------------

AbD000000-10
Issue 1  
Issue 2          Q             Q            Q 
ID: 2             MsEhdiehsla2 MsEhasdhsla2  hiGndiehsla2
ID: 3 

-------------------------------------------------------------------------------
DeD000000-10
Issue 1  
Issue 2          Q             Q            Q 
ID: 2             MsEhdiehsla2 MsEhasdhsla2  hiGndiehsla2
ID: 3 

-------------------------------------------------------------------------------

我将如何在python中执行此操作?

我能够获取内部的所有信息,但有没有办法创建我可以玩的数据段。

谢谢!

1 个答案:

答案 0 :(得分:0)

我认为你的正则表达式已被破坏(\A并不属于)。

在这种方法中,我假设分隔符将始终相同。我假设你不想进一步打破这些障碍。这只抓取你想要的块。您可以格式化它们但是很方便(包括在打印块时将分隔符打印出来)。

import re

r = re.compile(r'([A-Z][a-z][A-Z]\w*[-]\w*')
sep = "#-------------------------------------------------------------------------------#"
input_text = """
#------------------------------------------------------------------------------#

AbD000000-10
Issue 1  
Issue 2          Q             Q            Q 
ID: 2             MsEhdiehsla2 MsEhasdhsla2  hiGndiehsla2
ID: 3 

#------------------------------------------------------------------------------#
888888-10
         Q             Q            Q 
ID: 2             MsEhdiehsla2 MsEhasdhsla2  hiGndiehsla2
ID: 3 

#------------------------------------------------------------------------------#
DeD000000-10
Issue 1  
Issue 2          Q             Q            Q 
ID: 2             MsEhdiehsla2 MsEhasdhsla2  hiGndiehsla2
ID: 3 

#------------------------------------------------------------------------------#
"""
s = input_text.split(sep)
keep = [x for x in s if re.search(r , x)]

for v in keep:
    print(v)

但是,真的,如果你可以提供帮助,最好从更好的来源消费这些数据。如果这是一个日志文件,您可能无法对其进行大量控制。但是,如果可以,看看你是否可以获得更清晰的数据来源(可能是csv?)。