weixin_43392642
weixin_43392642
采纳率100%
2021-05-09 17:55 阅读 799

python-正则表达式

300

问题困扰了很长时间,希望能够得到高手的帮助。

问题:用正则表达式提取某一字段(纯文本)中的NIHSS评分,新建个字段放入。
提取内容:当文字中出现“NIHSS”时,后面因为书写习惯,会有不同数量的标点或文字,当第一次出现数字时,就是抓取的要点。

我目前的工作进度:
实例:
1、我的代码
def nihss(x):
    nihss=re.findall(r"(?<=NIHSS).*?\d+\.?\d*",x["病程详情(日常)"])
    return nihss
df["NIHSS"]=df.apply(nihss,axis=1)

2、被提取字段的内容示例
双侧肱二头肌反射、肱三头肌反射对称存在,双侧膝反射、踝反射消失,双侧Babinski征阴性,双侧Chaddock征阴性,双侧Hoffman征阴性,余查体未能配合。2019年1月,NIHSS评分:8分,2019年3月,NIHSS住院评分得5分,。辅助检查:颅脑CT(2019-04-07)

设想的提取结果:第一次:8;第二次:5


问题复述:就是把一段文字中的出现"HIHSS"后出现的第一个数字提取出来,在"HIHSS"后和数字之间可能会有不同的文字和标点符号,一段文字中可能有好几个NIHSS评分,谢谢。

如问题得到解决,可以商定一定的酬劳作为补脑费用[face]qq:21.gif[/face]

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

11条回答 默认 最新

  • 已采纳
    technologist_16 CSDN专家-天际的海浪 2021-05-09 21:59
    import re
    
    x = "双侧肱二头肌反射、肱三头肌反射对称存在,双侧膝反射、踝反射消失,双侧Babinski征阴性,双侧Chaddock征阴性,双侧Hoffman征阴性,余查体未能配合。2019年1月,NIHSS评分:8分,2019年3月,NIHSS住院评分得5分,。辅助检查:颅脑CT(2019-04-07)"
    
    nihss=re.findall(r"NIHSS.*?(\d+\.?\d*)", x, re.S)
    print(nihss) # ['8', '5']
    # 如果需要转成数值类型
    nihss = list(map(float,nihss))
    print(nihss) # [8.0, 5.0]
    
    点赞 1 评论 复制链接分享
  • technologist_32 CSDN专家-Time 2021-05-09 19:29

    测试用例有点少。给多点测试用例。

    import re
    test=u'2019年1月,NIHSS评分:18分,2019年3月,NIHSS住院评分得5分,。辅助检查:颅脑CT(2019-04-07),NIHSS住院评分得5分,。辅助检查:颅脑CT(2019-04-07)'
    
    p1 = re.compile(r"(?<=NIHSS)(.*?)分[得:](.*?)分", re.S)
    print(re.findall(p1, test))
    print(re.findall(p1, test)[0][1])
    点赞 评论 复制链接分享
  • ProfSnail ProfSnail 2021-05-09 18:06

    正则表达式编写如下: 

    import re
    a = ""双侧肱二头肌反射、肱三头肌反射对称存在,双侧膝反射、踝反射消失,双侧Babinski征阴性,双侧Chaddock征阴性,双侧Hoffman征阴性,余查体未能配合。2019年1月,NIHSS评分:8分,2019年3月,NIHSS住院评分得566分,。辅助检查:颅脑CT(2019-04-07) NIHSS, something, 239898"
    nihss = re.findall(r"NIHSS[^\d]*(\d+)", a)
    

    原理是用[^\d]*匹配紧跟着NIHSS之后非数字的一串连续值,接下来匹配(\d+)多个数字。

    在ipython里面做了一个简单的测试:

    我看题主还有一个pandas.DataFrame的表格 ,对于dataFrame做修改,可以这样做。

    def nihss(x):
        nihss = re.findall(r"NIHSS[^\d]*(\d+)", x)
        nihss = [int(x) for x in nihss]
        return nihss
    df["NIHSS"]=df["病程详情(日常)"].apply(nihss)

    ps:现在医生也要用python了吗,老兄好猛…… 

    点赞 4 评论 复制链接分享
  • BEYONDMA beyondma 2021-05-09 18:34

    想了一下,这个不用re反而简单

    import re
    prefix='NIHSS'
    def nihss(x):
        indexNow=x.find(prefix)
        result=[]
        while indexNow:
            print("indexNow is ",indexNow)
            i=indexNow+len(prefix)
            while i<len(x):
                if x[i].isdigit():
                    if (i+1)<len(x):
                        if x[i+1].isdigit():
                           
                            result.append(x[i]+x[i+1])
                            break
                    result.append(x[i])       
                    break
                i=i+1
            indexNow=x.find(prefix,indexNow+len(prefix))
            print("indexNow update is ",indexNow)
            if indexNow==-1:
                break
        return result
    
    test=u'2019年1月,NIHSS评分:18分,2019年3月,NIHSS住院评分得5分,。辅助检查:颅脑CT(2019-04-07),NIHSS住院评分得5分,。辅助检查:颅脑CT(2019-04-07)'
    print(nihss(test))
    #p1 = re.compile(r"(?<=NIHSS).*?", re.S)
    #print(re.findall(p1, test))
    #print(test)
    

    以上考虑了有两位数评分的可能性代码运行结果如下:

    indexNow is  8
    indexNow update is  28
    indexNow is  28
    indexNow update is  64
    indexNow is  64
    indexNow update is  -1
    ['18', '5', '5']
    点赞 3 评论 复制链接分享
  • xufive 天元浪子 2021-05-09 21:10

    感觉这样写就可以吧?

    >>> import re
    >>> p = re.compile(r'NIHSS\D*(\d*)')
    >>> s = '双侧肱二头肌反射、肱三头肌反射对称存在,双侧膝反射、踝反射消失,双侧Babinski征阴性,双侧Chaddock征阴性,双侧Hoffman征阴性,余查体未能配合。2019年1月,NIHSS评分:8分,2019年3月,NIHSS住院评分得5分,。辅助检查:颅脑CT(2019-04-07)'
    >>> p.findall(s)
    ['8', '5']
    >>> s = '双侧肱二头肌反射、肱三头肌反射对称存在,双侧膝反射、踝反射消失,双侧Babinski征阴性,双侧Chaddock征阴性,双侧Hoffman征阴性,余查体未能配合。2019年1月,NIHSS评分:8888分,2019年3月,NIHSS住院评分得15分,。辅助检查:颅脑CT(2019-04-07)'
    >>> p.findall(s)
    ['8888', '15']
    点赞 1 评论 复制链接分享
  • m0_54788431 一切因为有你 2021-05-10 14:08
    ##楼主大气,这题简单
    
    import re
    s='双侧肱二头肌反射、肱三头肌反射对称存在,双侧膝反射、踝反射消失,双侧Babinski征阴性,双侧Chaddock征阴性,双侧Hoffman征阴性,余查体未能配合。2019年1月,NIHSS评分:8分,2019年3月,NIHSS住院评分得5分,。辅助检查:颅脑CT(2019-04-07)'
    
    res=re.findall('NIHSS.*?(\d+)',s,re.S)
    print(res)
    
    点赞 1 评论 复制链接分享
  • m0_54889416 小小吴"k" 2021-05-09 18:15
    import re
    
    
    nihss = '''
    双侧肱二头肌反射、肱三头肌反射对称存在,双侧膝反射、
    踝反射消失,双侧Babinski征阴性,双侧Chaddock征阴性,
    双侧Hoffman征阴性,余查体未能配合。
    
    NIHSS住院评dfdfs分得asda6a分2019年1月,NIHSS评分:8分,
    2019年3月,NIHSS住院评分得5分,。辅助检查:颅脑CT(2019-04-07)
    '''
    print(re.findall(r'NIHSS.*?([0-9])[分|a]', nihss, re.S))

    运行结果:['6', '8', '5']

    点赞 评论 复制链接分享
  • weixin_42376907 weixin_42376907 2021-05-09 19:09

    关键看有没有10分的,两位数会麻烦

    点赞 评论 复制链接分享
  • QA_Assistant 有问必答小助手 2021-05-10 10:57

    您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

    如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

    ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

    点赞 评论 复制链接分享
  • m0_54788431 一切因为有你 2021-05-10 14:13
    def nihss(x):
        nihss=re.findall('NIHSS.*?(\d+)',x,re.S)
        return nihss
    df["NIHSS"]=df['你的纯文本字段名'].apply(nihss)
    点赞 评论 复制链接分享
  • QA_Assistant 有问必答小助手 2021-05-11 15:43

    非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!

    速戳参与调研>>>https://t.csdnimg.cn/Kf0y

    点赞 评论 复制链接分享

相关推荐