2017-09-25 62 views
1

我想提取给定文本的内容,以特定标题开头。pyparsing提取给定标题的内容

Header Text_A 
blablabla 
blablablabla 

Header Text_B 
blablablablablan 
blablaa 

为此,我已经使用thepyparsing 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 

效果很好..

你有什么想法,我该如何解决问题。

+0

如果存在特定标题,您需要单独提取标题部分还是提取数据部分?也请用更简单的例子来解释你的问题。我甚至无法理解成功示例和失败示例之间的区别 – JKC

+0

我需要提取与给定标题相关的数据部分。换句话说,如果我找到了一个给定的头文件,我的函数应该提取该头文件之后的数据......我实现的代码提取了这些信息,尽管它只有当我的文本只包含我拥有的头文件定义。意思是有效的,只有当我有一个包含上面定义的标题的结构的文本。如果我有一个文本前面有一个与标题不匹配的文本,我已经实现的代码不起作用。希望我更清楚,对不起我的英文不好。 – Djo

+0

使用正则表达式来查找特定文本是否存在于标题行中。如果发现然后提取数据部分,否则离开它。 – JKC

回答

0

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

例如:

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个文字值,即不考虑位置的字“头”,则此代码将检查单词“头”是否存在于文本或不并进行相应处理

希望这有助于。

+0

是的,我理解这个想法。但是,我应该如何使用pyparsing来做到这一点,以及如何处理数据部分的多线程? – Djo