用python从字符串列表中提取数字

时间:2014-05-23 03:10:00

标签: python string list parsing

我有一个字符串列表,我正在尝试解析对我有意义的数据。我需要一个包含在字符串中的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值由冒号分隔,但列表顺序仍与输入列表匹配。

2 个答案:

答案 0 :(得分:3)

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

对列表中的项目进行迭代,join ; 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'] 的结果:

{{1}}

打印:

{{1}}

答案 1 :(得分:0)

基于@alecxe解决方案,您也可以不进行任何导入。

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

您可以使用'; '.join()

将它们组合成所需的格式

把所有东西放在一起:

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

打印出来:

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