【问题标题】:extracting numbers from list of strings with python用python从字符串列表中提取数字
【发布时间】:2014-07-12 06:58:35
【问题描述】:

我有一个字符串列表,我正在尝试解析对我有意义的数据。我需要一个包含在字符串中的 ID 号。有时可能是两个甚至三个。示例字符串可能是:

lst1 = [
    "(Tower 3rd floor window corner_ : option 3_floor cut out_large : GA - floors : : model lines : id 3999595(tower 4rd floor window corner : option 3_floor: : whatever else is in iit " new floor : id 3999999)", 
    "(Tower 3rd floor window corner_ : option 3_floor cut out_large : GA - floors : : model lines : id 3998895(tower 4rd floor window corner : option 3_floor: : id 5555456 whatever else is in iit " new floor : id 3998899)"
]

我希望能够遍历该字符串列表并仅提取那些突出显示的 id 值。

输出将是lst1 = ["3999595; 3999999", "3998895; 5555456; 3998899"],其中来自同一输入字符串的每个 id 值用冒号分隔,但列表顺序仍与输入列表匹配。

【问题讨论】:

  • 请正确格式化您的问题。对于回答者来说,这真的很令人反感。
  • 我也更新了我的答案,和@alecxe 一样。这里的重点始终是找到可以提取 id 的模式。
  • +1 如果非常基本(OP 不知道正则表达式),这个问题是完全合法的并且是主题性的。有关对新手的普遍敌对态度,请参阅meta.stackoverflow.com/questions/254881/… et al.

标签: python string list parsing


【解决方案1】:

您可以使用id\s(\d{7}) 正则表达式。

遍历列表中的项目和joinfindall(); 调用的结果:

import re

lst1 = [
    '(Tower 3rd floor window corner_ : option 3_floor cut out_large : GA - floors : : model lines : id 3999595(tower 4rd floor window corner : option 3_floor: : whatever else is in iit " new floor : id 3999999)',
    '(Tower 3rd floor window corner_ : option 3_floor cut out_large : GA - floors : : model lines : id 3998895(tower 4rd floor window corner : option 3_floor: : id 5555456 whatever else is in iit " new floor : id 3998899)'
]

pattern = re.compile(r'id\s(\d{7})')
print ["; ".join(pattern.findall(item)) for item in lst1]

打印:

['3999595; 3999999', '3998895; 5555456; 3998899']

【讨论】:

    【解决方案2】:

    基于@alecxe 解决方案,您也可以在没有任何导入的情况下执行此操作。

    如果您的 id 号码总是在 id 之后并且有固定的 (7) 位数,我可能会使用 .split('id ') 将其分隔并从第二个块开始获取 7 位数。

    您可以使用'; '.join()将它们以所需的格式组合在一起

    把所有东西放在一起:

    pattern = ['; '.join([value[:7] for value in valueList.split('id ')[1:]]) for valueList in lst1]
    

    打印出来的:

    ['3999595; 3999999', '3998895; 5555456; 3998899']
    

    【讨论】:

    • 它们实际上不在 ** 我试图在浏览器中使它们加粗以使它们脱颖而出。我只是将字符串编辑为正确的格式。我的错。
    猜你喜欢
    • 1970-01-01
    • 2017-12-15
    • 2018-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-11
    相关资源
    最近更新 更多