美文网首页
python使用正则表达式进行括号匹配

python使用正则表达式进行括号匹配

作者: HuaQ_f6fe | 来源:发表于2019-04-06 18:28 被阅读0次

    问题背景:

    最近在尝试爬取kdd等计算机顶会的发文情况(如author、title、abstract等内容),尝试进行构建社会网络,并且使用相关理论来分析,如三元闭包的情况,同质性的情况,在对kdd2017的作者信息进行处理的时候发现以下几种情况

    • 有的作者名是德语,如Christian Böhm (Ludwig-Maximilians-Universität München)
    • 有的人名不是常见的First Name Last Name的结构,如Patrick P. C. Lee (The Chinese University of Hong Kong)
    • 还有的某些亚裔学者的名字可能存在连接符,如Keng-Hao Chang (Microsoft)
    • 此外还有对姓氏使用缩写的情况,如D. Sculley (Google, Inc.)
      故无法使用单一的正则表达式直接匹配人名,而所有作者信息的后面都有(该作者来自的机构),因此考虑使用正则表达式对括号部分进行匹配再在此基础上使用re.sub方法去掉括号部分

    处理方法:

    如对author=Christian Böhm (Ludwig-Maximilians-Universität München)进行处理

    import re
    pattern = '.*(\(.*\))'  # 此处对括号加转义符号以避免Python认为我在添加子块
    match = re.match(pattern=pattern, string=author)
    if match:
        temp = match.group(0)
        print(re.sub(pattern=match.group(1), repl='', string=temp))
        # 此时输出的值是Christian Böhm ()而非我们想要的Christian Böhm
        # 再度尝试发现使用sub方法的时候在pattern那里对match.group(1)添加括号即可
        print(re.sub(pattern='\('+match.group(1)+'\)', repl='', string=temp))
        # 此时的输出就是Christian Böhm了,达到了我们的目的
        # 推测是因为只使用match.group(1)的时候它只会提取内容,认为括号是子块
        
    

    相关文章

      网友评论

          本文标题:python使用正则表达式进行括号匹配

          本文链接:https://www.haomeiwen.com/subject/quzriqtx.html