Python pyparsing用于提取给定标头的内容

Python pyparsing用于提取给定标头的内容,python,text-mining,pyparsing,Python,Text Mining,Pyparsing,我试图提取以特定标题开头的给定文本的内容 Header Text_A blablabla blablablabla Header Text_B blablablablablan blablaa 为此,我以这种方式使用了Piparsing api: ParserElement.defaultWhitespaceChars=(" \t") NL = LineEnd().suppress() END = StringEnd() header_1=Literal('Header Text_A') h

我试图提取以特定标题开头的给定文本的内容

Header Text_A
blablabla
blablablabla

Header Text_B
blablablablablan
blablaa
为此,我以这种方式使用了Piparsing api:

ParserElement.defaultWhitespaceChars=(" \t")
NL = LineEnd().suppress()
END = StringEnd()
header_1=Literal('Header Text_A')
header_2=Literal('Header Text_B')
any_header = (header_1 | header_2)
# text isn't just anything! don't accept header line, and stop at the end of
the input string
text=Group(~any_header + ~END + restOfLine)
overall_structure = ZeroOrMore(Group(any_header +
Group(ZeroOrMore(text))))
overall_structure.ignore(NL)
当我只有一个带有上述标题的条目文本时,代码运行良好。然而,当我有一个包含上述标题示例的条目和另一个文本时,它就不起作用了。 例如,如果我有一个条目,如:

blablablablabla
Header Text_A
blablabla
blablablabla

Header Text_B
blablablablablan
blablaa
它不起作用。。。但是,如果我只有文本:

Header Text_A
blablabla
blablablabla

Header Text_B
blablablablablan
blablaa
它工作得很好


您是否知道如何解决这些问题。

使用正则表达式检查特定文本(在本例中为“标题”)是否存在。如果存在,则提取数据部分,否则不提取

例如:

text = 'gfgfdAAA1234ZZZuHeadijjk'
text = 'gfgfdHeadAAA1234ZZZuijjk'
text = 'gfgfdAAAHead1234ZZZuijjk'

m = re.search('Head', text)
if m:
    extract the data part
else:
    do not extract the data part
对于所有上述3个文本值,即无论单词“Head”的位置如何,该代码将检查单词“Head”是否出现在文本中,并进行相应处理


希望这有帮助。

使用正则表达式检查特定文本(在本例中为“标题”)是否存在。如果存在,则提取数据部分,否则不提取

例如:

text = 'gfgfdAAA1234ZZZuHeadijjk'
text = 'gfgfdHeadAAA1234ZZZuijjk'
text = 'gfgfdAAAHead1234ZZZuijjk'

m = re.search('Head', text)
if m:
    extract the data part
else:
    do not extract the data part
对于所有上述3个文本值,即无论单词“Head”的位置如何,该代码将检查单词“Head”是否出现在文本中,并进行相应处理


希望这有帮助。

您需要单独提取标题部分,或者如果存在特定标题,则需要提取数据部分?请用更清楚的例子来解释你的问题。我甚至无法理解成功示例和失败示例之间的区别我需要提取与给定标题相关的数据部分。换句话说,如果我找到一个给定的头,我的函数应该提取该头之后的数据。。。我实现的代码提取了这些信息,尽管它只在我的文本中包含我定义的标题时才起作用。这意味着,只有当我有一个包含上面定义的标题结构的文本时,这才有效。如果前面有一个与标题不匹配的文本,那么我所实现的代码就无法工作。希望我说得更清楚,抱歉我的英语不好。使用正则表达式来查找特定文本是否出现在标题行中。如果找到,则提取数据部分,否则保留它。已发布我的答案。请检查它是否有帮助您已经定义了一个与非标题匹配的
text
表达式,为什么不使用
Optional(text)
total\u structure=Optional(text)+ZeroOrMore(Group(any\u标题+Group(ZeroOrMore(text)))启动您的整体结构
您需要单独提取标题部分,还是提取数据部分(如果存在特定标题)?请用更清楚的例子来解释你的问题。我甚至无法理解成功示例和失败示例之间的区别我需要提取与给定标题相关的数据部分。换句话说,如果我找到一个给定的头,我的函数应该提取该头之后的数据。。。我实现的代码提取了这些信息,尽管它只在我的文本中包含我定义的标题时才起作用。这意味着,只有当我有一个包含上面定义的标题结构的文本时,这才有效。如果前面有一个与标题不匹配的文本,那么我所实现的代码就无法工作。希望我说得更清楚,抱歉我的英语不好。使用正则表达式来查找特定文本是否出现在标题行中。如果找到,则提取数据部分,否则保留它。已发布我的答案。请检查它是否有帮助您已经定义了一个与非标题匹配的
text
表达式,为什么不用
Optional(text)
开始您的整体结构:
overall\u structure=Optional(text)+ZeroOrMore(Group)(任何标题+Group(ZeroOrMore(text))
是的,我理解这个想法。但我应该如何使用pyparsing,以及如何处理数据部分的多个lne?是的,我理解这个想法。但我应该如何使用pyparsing进行解析,以及如何处理数据部分上的多个lne?