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