V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MOONLIGHTT
V2EX  ›  程序员

Python 中的正则表达式

  •  
  •   MOONLIGHTT ·
    Sunnycheey · 2019-10-13 11:51:43 +08:00 · 1764 次点击
    这是一个创建于 1853 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我想从论文中提取 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 来完成任务,但由于我正则表达式知识不太够,因此想借着这个机会学习以下。

    6 条回复    2019-12-20 20:59:44 +08:00
    676529483
        1
    676529483  
       2019-10-13 12:00:25 +08:00
    show me your code。
    一般正则主要坑有几点
    1、你用的是 re.match 还是 re.search
    2、你用的 Py2 还是 3,主要区别是 unicode 和 str
    MOONLIGHTT
        2
    MOONLIGHTT  
    OP
       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
        3
    bumz  
       2019-10-13 12:35:51 +08:00 via iPhone
    []里面只能放单字符,你这已经是匹配连续两个字符了

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

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

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

    https://github.com/allenai/science-parse
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2807 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 02:01 · PVG 10:01 · LAX 18:01 · JFK 21:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.