Python 中的正则表达式

2019-10-13 11:51:43 +08:00
 MOONLIGHTT

我想从论文中提取 ABSTRACT,因为论文的格式一般为 PDF,因此我先用了 pdfminer 包来对 pdf 进行 parser (这里先假设 parser 的结果是对的)。

之后我想从论文中提取 ABSTRACT 的内容,ABSTRACT 的一般格式为ABSTRACT\ncontent\n,也就是说我想提取 content 的内容(可以认为 content 内容由文本内容和换行符\n 组成)。于是我用了

ABSTRACT\n([^\n]+\n)+\n'

对内容进行提取,但这种方法不 work。

之后我注意到在 re 中需要对\转义,因此我把正则表达式修改为:

ABSTRACT\\n([^\\n]+\\n)+\\n'

修改之后,虽然可以在这里测试成功,但在代码里还是不 work。

PS:由于论文的结构性比较好,因此在抽取时完全可以不用 re 来完成任务,但由于我正则表达式知识不太够,因此想借着这个机会学习以下。

1771 次点击
所在节点    程序员
6 条回复
676529483
2019-10-13 12:00:25 +08:00
show me your code。
一般正则主要坑有几点
1、你用的是 re.match 还是 re.search
2、你用的 Py2 还是 3,主要区别是 unicode 和 str
MOONLIGHTT
2019-10-13 12:32:05 +08:00
感谢回复,我的 pattern 好像没有问题,问题在于我好像误用了 re.findall()和 re.search(),把 re.findall()换成 re.search()问题就解决了。我的问题似乎和[这个]( https://stackoverflow.com/questions/9000960/python-regular-expressions-re-search-vs-re-findall)哥们的问题是一样的。
bumz
2019-10-13 12:35:51 +08:00
[]里面只能放单字符,你这已经是匹配连续两个字符了

r'ABSTRACT\\n((?:(?!\\n).)+\\n)+\\n'
Procumbens
2019-10-13 13:22:28 +08:00
@bumz []中^开头表示取非 不表示字符
okface
2019-12-12 16:40:57 +08:00
请问大佬说的完全不用 re 来完成指的是什么方法完成,我也在做类似的事情。
MOONLIGHTT
2019-12-20 20:59:44 +08:00
@okface

手写字符串匹配,因为我抽取出的 abstract 后面有两个\n\n,所以这个也不难写。

不过貌似现在流行用 NLP 的技术来 pdf 中的数据,给老哥指条路:

https://github.com/allenai/science-parse

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/608828

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX