快速提问,因为我被困住了,似乎无法再深入了解。
这是我的问题:
我在数据集中工作,我从XML转储中提取维基百科页面的每个部分名称。我提取文本,从文本中,每个部分都通过以下方式给出:
==部分名称==
但是,还有一些我不想处理的小节,通过
给出===部分名称===
目前我正在使用正则表达式来过滤文本中的部分(pagetext)
sections = re.findall("==(.*)==", pagetext)
然而,结果是小节也包含在我的部分列表中。问题:如何从我的部分列表中过滤这些子部分,以便仅从文本中检索部分。
我已经使用了这个列表理解,但这不起作用
sections = [section for section in sections if section[0] == (r"^=")]
非常感谢任何帮助:)非常感谢提前!!
答案 0 :(得分:2)
如果周围的文字完全是任意的,您可能不得不诉诸negative lookahead and negative lookbehind:
re.findall(r'(?<!=)==(?!=)(.*?)(?<!=)==(?!=)', pagetext)
# (?<!...) only matches if not preceded by ...
# (?!...) only matches if not followed by ...
# (.*?) the captured group itself, anything matched non-greedily
这可确保封闭'=='
的部分既不在'='
之前也不在其后面。
答案 1 :(得分:0)
re.M
,以便表达式可以锚定在行的开头。例如
sections = re.findall("^==([^=].*)==", pagetext, re.M)