Python:从列表中删除/过滤等号



快速问题,因为我被困住了,似乎无法进一步。

这是我的问题:

我正在

一个数据集中工作,我正在从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

这可确保包含'=='的部分既不先不后'='

  1. 启用多行标志re.M以便表达式可以锚定在行首。
  2. 将表达式锚定在每行的开头。
  3. 通过排除第三个等号来排除原始正则表达式中的小节

例如

sections = re.findall("^==([^=].*)==", pagetext, re.M)

最新更新