为何Python正则表达式提取目录时无法匹配连字符后的内容
问题原因
你写的正则匹配失败有两个核心原因:
- 你用到的
\S规则仅匹配非空白字符,而你需要提取的条目名称中间包含空格(比如ITOM - IT Object Model中ITOM后就存在空格),\S*遇到第一个空格就会停止匹配,所以仅能拿到每个条目的开头单词。 - 你的正则没有设置正确的终止匹配边界,就算修改规则允许匹配空格,也会把后面的点号、页码内容一起匹配,不符合提取要求。
另外你代码中定义的字符串变量名为test,正则调用时用的是test1,变量名不匹配也会导致运行异常。
解决方法
你可以用以下正则实现需求,依靠条目标题后连续的点号作为终止边界:
re.findall(r'^(.*?)\s*\.+', test, re.MULTILINE)
规则说明:
^配合re.MULTILINE匹配每一行的行首(.*?)非贪婪匹配任意字符,作为捕获组返回就是你需要的条目标题\s*\.+匹配标题末尾可能的空白字符,再匹配至少一个连续的点号作为终止标记,自动过滤掉后面的点和页码内容。
运行上述代码即可拿到你需要的结果:
['Disclaimer', 'ITOM - IT Object Model', 'DB – Datenbank Model', 'DB - Datenbank Model - Views' ]
内容的提问来源于stack exchange,提问作者Wiliam
相关产品推荐
相关产品推荐

