pyparsing以提取给定标头的内容

时间:2017-09-25 09:21:36

标签: python text-mining pyparsing

我正在尝试提取以特定标题开头的给定文本的内容。

Header Text_A
blablabla
blablablabla

Header Text_B
blablablablablan
blablaa

为此,我以这种方式使用了apparsing 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

效果很好..

你知道我怎么能解决这些问题。

1 个答案:

答案 0 :(得分:0)

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

例如:

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”字样并进行相应处理

希望这有帮助。