【问题标题】:pandas get a value out of text using regex熊猫使用正则表达式从文本中获取值
【发布时间】:2021-01-06 18:05:39
【问题描述】:

我有这样的文字:

text = 'Ronald Mayr: A\nBell Kassulke: B\nJacqueline Rupp: A \nAlexander Zeller: C\nValentina Denk: C \nSimon Loidl: A \nElias Jovanovic: B \nStefanie Weninger: B \nFabian Peer: C \nHakim Botros: B\nEmilie Lorentsen: B\n'

我需要获取所有具有“:B”值的名称。例如 Bell Kassulke、Elias Jovanovic

我正在尝试这样的事情

stu = re.findall('\w+.*.: B',text)

但是这个给了我这样的列表:

['Bell Kassulke: B',
 'Simon Loidl: B',
 'Elias Jovanovic: B']

虽然我只需要名称而不是整个列表。我到底能做什么?

【问题讨论】:

  • 从结果中消除“:B”:stu = str(stu).replace(': B','')

标签: python python-3.x regex pandas regex-lookarounds


【解决方案1】:

试试这个

'(' 开始捕获

\w+

匹配任何单词字符(等于 [a-zA-Z0-9_])

量词——匹配一次到无限次,尽可能多次,按需回馈(贪心)

.*

匹配任何字符(行终止符除外)

量词 - 在零次和无限次之间匹配,尽可能多次,根据需要回馈(贪婪)

')' 捕获结束

:B

匹配字符 : B 字面意思(区分大小写)

pattern='(\w+.*.): B'
re.findall(pattern,grades)

【讨论】:

    【解决方案2】:

    你可以使用

    ^(.*?):\s*B\s*$
    

    regex demo

    详情

    • ^ - 字符串的开头
    • (.*?) - 第 1 组(.findall 的实际值):尽可能少的除换行符以外的任何零个或多个字符
    • : - 冒号
    • \s*B\s* - B 包含零个或多个空格
    • $ - 字符串结束/

    在 Pandas 中,您可以使用

    df['Col name here'].str.findall(r'^(.*?):\s*B\s*$').str.join(',')
    

    或者,如果您需要每个值匹配一个:

    df['Results'] = df['Col name here'].str.extract(r'^(.*?):\s*B\s*$', expand=False)
    

    【讨论】:

      【解决方案3】:

      你可以在你的正则表达式之后添加这行代码:

      stu = [s.replace(': B', '') for s in stu]
      

      【讨论】:

        猜你喜欢
        • 2020-01-05
        • 2021-10-14
        • 2018-04-30
        • 1970-01-01
        • 1970-01-01
        • 2017-06-18
        • 2019-06-16
        • 2015-11-18
        相关资源
        最近更新 更多