使用Python在模式之间刮取数据
我有一个数据集,我想获取数据的某些方面。对于第一行和第一个单词,如果它等于使用Python在模式之间刮取数据,python,regex,Python,Regex,我有一个数据集,我想获取数据的某些方面。对于第一行和第一个单词,如果它等于regex=re.compile(r'\A([A-Z][A-Z][A-Z]\w*[-]\w*')。我如何在两行(即破折号)之间刮取该数据,并将该数据与该行一起保留,并删除该标识符不等于“regex”的数据 例如:我想将数据保存在AbD000000-10和DeD000000-10范围内,但不想88888-10 ----------------------------------------------------------
regex=re.compile(r'\A([A-Z][A-Z][A-Z]\w*[-]\w*')
。我如何在两行(即破折号)之间刮取该数据,并将该数据与该行一起保留,并删除该标识符不等于“regex”的数据
例如:我想将数据保存在AbD000000-10
和DeD000000-10
范围内,但不想88888-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中如何实现这一点
我能够获取里面的所有信息,但是有没有一种方法可以创建数据段,然后我就可以使用它了
谢谢!我想你的正则表达式坏了(那
\A
不属于你)
在这种方法中,我假设分隔符总是相同的。我假设您不想进一步分解块。这只会捕获您想要的块。您可以方便地格式化它们(包括在打印块时打印分隔符)
实际上,如果你能帮上忙的话,最好从更好的来源使用这些数据。如果这是一个日志文件,你可能无法对其进行很多控制。但如果可以,看看你是否能获得一个更干净的数据源(可能是csv?)。我认为你的正则表达式坏了(那不属于
\a
)
在这种方法中,我假设分隔符总是相同的。我假设您不想进一步分解块。这只会捕获您想要的块。您可以方便地格式化它们(包括在打印块时打印分隔符)
实际上,如果你能帮助它,最好从更好的来源使用这些数据。如果这是一个日志文件,你可能无法对其进行很多控制。但如果可以,看看是否可以获得更干净的数据源(可能是csv?).AbD000000-10和DeD000000-10记录是否始终由两个物理行组成?888888-10记录是否始终由一个物理行组成?是否有任何不同类型的记录?标识符之间没有一致性,只有我要获取的标识符遵循:大写-小写-大写-大写-第一个的模式虚线后的第一行中有“word”。为了处理这些数据段,您能否向我们展示您在获取这些数据时看到的内容,包括可能填充到当前输出中的任何标记?当然。现在我只获取regex中的数据标识符:所以它只显示在prettytable=[Key,Error,ID]([AbD000000-10,DeD000000-10])之后,错误和ID列表为空,因为它抓取了6个问题,而不是4个问题,因为我没有限制只选择数据直到下一个虚线。如果这有意义。AbD000000-10和DeD000000-10记录是否总是由两条物理线组成?8888888-10记录是否总是由一条物理线组成有不同类型的记录吗?标识符之间没有一致性,只是我要获取的标识符遵循:大写-小写-大写-第一个“单词”的模式“在虚线后的第一行中。为了处理这些段,您能告诉我们您在获取这些数据时看到了什么,包括可能填充到当前输出中的任何标记吗?当然。现在我只获取数据,即正则表达式中的标识符:所以它只显示在prettytable=[Key,Error,ID]([AbD000000-10,DeD000000-10]),错误和ID列表为空,因为它抓取的是6个问题,而不是4个问题,因为我没有限制只选择数据直到下一个虚线。如果有意义,它只能是一个文本文件。下面是一个更好的数据示例:在我的例子中,我有data=open(“data.txt”,“r”)因此,我得到的错误文件对象没有属性拆分。有没有办法得到与文件相同的结果?谢谢!即使我使用input_text,我得到:AttributeError:“str”对象没有属性“拆分”现在它说AttributeError:builtin_function_或_method对象没有属性“拆分”很难调试,不知道是什么,具体来说,你正在做。你能用你的修订更新OP吗?它只能是一个文本文件。这里有一个更好的数据示例:在我的例子中,我有data=open(“data.txt”,“r”)因此,我得到的错误文件对象没有属性拆分。有没有办法得到与文件相同的结果?谢谢!即使我使用input_text,我得到:AttributeError:“str”对象没有属性“拆分”现在它说AttributeError:builtin_function_或_method对象没有属性“拆分”很难调试,不知道是什么,具体来说,你正在做。你能用你的修订更新OP吗?
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)