大发龙虎首页    注册   登录
大发龙虎 = way to explore
大发龙虎 是一个大发龙虎关于 分享和探索的地方
现在注册
已注册用户请  登录
OPPO Watch
MOONLIGHTT
大发龙虎  ›  程序员

Python 中的正则表达式

  •  
  •   MOONLIGHTT · 230 天前 · 1089 次点击
    这是一个创建于 230 天前的主题,其中的信息可能已经有所发展或是发生改变。

    大发龙虎我 想从论文中提取 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   230 天前
    show me your code。
    一般正则主要坑有几点
    1、大发龙虎你 用的是 re.match 还是 re.search
    2、大发龙虎你 用的 Py2 还是 3,主要区别是 unicode 和 str
    MOONLIGHTT
        2
    MOONLIGHTT   230 天前
    感谢回复,大发龙虎我 的 pattern 好像没有问题,问题在于大发龙虎我 好像误用了 re.findall()和 re.search(),把 re.findall()换成 re.search()问题就解决了。大发龙虎我 的问题似乎和[这个]( http://stackoverflow.com/questions/9000960/python-regular-expressions-re-search-vs-re-findall)哥们的问题是一样的。
    bumz
        3
    bumz   230 天前 via iPhone
    []里面只能放单字符,大发龙虎你 这已经是匹配连续两个字符了

    r'ABSTRACT\\n((?:(?!\\n).)+\\n)+\\n'
    Procumbens
        4
    Procumbens   230 天前
    @bumz []中^开头表示取非 不表示字符
    okface
        5
    okface   169 天前
    请问大佬说的完全不用 re 来完成指的是什么大发龙虎方法 完成,大发龙虎我 也在做类似的事情。
    MOONLIGHTT
        6
    MOONLIGHTT   161 天前   ❤️ 1
    @okface

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

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

    http://github.com/allenai/science-parse
    大发龙虎关于   ·   FAQ   ·   API   ·   大发龙虎大发龙虎我 们 的愿景   ·   广告投放   ·   感谢   ·   实用小大发龙虎工具   ·   3021 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 06:32 · PVG 14:32 · LAX 23:32 · JFK 02:32
    ♥ Do have faith in what you're doing.