快速问题,因为我被困住了,似乎无法进一步。
这是我的问题:
我正在一个数据集中工作,我正在从XML转储中提取维基百科页面的每个部分名称。我提取文本并从文本中,每个部分都通过以下方式给出:
==章节名称==
但是,也有一些小节我不想处理,而是通过
===章节名称===
目前我正在使用正则表达式来过滤文本(页面文本(中的部分
sections = re.findall("==(.*)==", pagetext)
然而,结果是这些小节也包含在我的小节列表中。问题:如何从我的部分列表中过滤这些小节,以便仅从文本中检索这些小节。
我使用了这个列表理解,但这不起作用
sections = [section for section in sections if section[0] == (r"^=")]
任何帮助都非常感谢:(提前非常感谢!!
如果周围的文本完全是任意的,你可能不得不求助于负前瞻和负后视:
re.findall(r'(?<!=)==(?!=)(.*?)(?<!=)==(?!=)', pagetext)
# (?<!...) only matches if not preceded by ...
# (?!...) only matches if not followed by ...
# (.*?) the captured group itself, anything matched non-greedily
这可确保包含'=='
的部分既不先不后'='
。
- 启用多行标志
re.M
以便表达式可以锚定在行首。 - 将表达式锚定在每行的开头。
- 通过排除第三个等号来排除原始正则表达式中的小节
例如
sections = re.findall("^==([^=].*)==", pagetext, re.M)