【问题标题】:Extracting name and number from a string从字符串中提取姓名和号码
【发布时间】:2019-07-10 17:25:12
【问题描述】:

我正在尝试提取“消息文本”中的内容,特别是名称(在“录取”一词之后)和卡号(括号内),然后将结果放入新列中。实现这一目标的最佳方法是什么? 我试过了

access_file['Name']=access_file['Message Text'].str.extract('(.*?)')

但结果列是空白的。

谢谢,

Message Type    Server Date/Time    Message Text    Message Date/Time
0   Card Admitted   7/25/2018 8:10  Admitted 'Santos, Samuel' (Card: 203532)   at '2nd Flr Check Rm 02-19' (IN).    7/25/2018 8:10
1   Card Admitted   7/25/2018 9:10  Admitted 'Zhu, Jin Chang' (Card: 203929)   at '2nd Flr Check Rm 02-19' (IN).    7/25/2018 9:10
2   Card Admitted   7/25/2018 9:34  Admitted 'Zhu, Jin Chang' (Card: 203929)   at '2nd Flr Check Rm 02-19' (IN).    7/25/2018 9:34
3   Card Admitted   7/25/2018 9:42  Admitted 'Klein, Erwin' (Card: 511268)   at '2nd Flr Check Rm 02-19' (IN).  7/25/2018 9:41
4   Card Admitted   7/25/2018 10:29 Admitted 'Tesis, Olga' (Card: 203047)   at '2nd Flr Check Rm 02-19' (IN).   7/25/2018 10:29

【问题讨论】:

    标签: python regex pandas dataframe


    【解决方案1】:

    这个link 可能会有所帮助。它解决了完全相同的问题。

    关于要使用的正则表达式,可以使用:

    r".*Admitted\s+\'(?P<Name>[a-zA-Z, ]+)\' \(Card: (?P<digit>\d+)\).*"

    谢谢。

    this 上的示例三表示您可以使用单个正则表达式来完成。这样会更有帮助,更干净。

    【讨论】:

    • 此模式返回 nan 值
    • 已编辑。我错过了作品 Admitted 和名字开头之间的空格。
    【解决方案2】:

    你可以试试这个模式:

    pattern = "Admitted\s+\'(?P<name>.*)\'.*\(Card\D*(?P<card_number>\d+)\)"
    df['Message Text'].str.extract(pattern)
    

    输出:

                 name card_number
    0  Santos, Samuel      203532
    1  Zhu, Jin Chang      203929
    2  Zhu, Jin Chang      203929
    3    Klein, Erwin      511268
    4     Tesis, Olga      203047
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-29
      相关资源
      最近更新 更多