python - 从元素列表中提取匹配的数字
问题描述
我有混合了数字、字母和特殊字符的元素列表:
string = ['1 B, 14/A - P,1C,2A,21 C - A',
'3P,21B,2-A,1A',
'3C,2-W,ABC 200',
'3 Z,ABC 100 - BB',
'ABC 300,ABC 200',
'ABC 200,ABC 100',
'1c/A,2 - z']
我想提取与条件匹配的元素。
条件:列表中的元素应该是starting with the Matching number
或以ABC (Matching number)
所需输出:
starting_with_one = ['1 B, 14/A - P,1C,2A,21 C - A', # ---> Here `1 B ,14/A - P,1C` are contains the number 1
'3P,21B,2-A,1A', # ---> Here `1A` Contains the number 1
'3 Z,ABC 100 - BB', # ---> Here `ABC 100 - BB` Contains the number 1
'ABC 200,ABC 100', # ---> Here `ABC 100` Contains the number 1
'1c/A,2 - z'] # ---> Here `1c/A' contains 1
starting_with_two = ['1 B, 14/A - P,1C,2A,21 C - A',
'3P,21B,2-A,1A',
'3C,2-W,ABC 200',
'ABC 300,ABC 200',
'ABC 200,ABC 100',
'1c/A,2 - z']
我尝试了什么:
搜索号码1
:
for i in string:
print(re.search(r"(^|[^\d])(1)", i))
<_sre.SRE_Match object; span=(0, 1), match='1'>
<_sre.SRE_Match object; span=(10, 12), match=',1'>
None
<_sre.SRE_Match object; span=(7, 9), match=' 1'>
None
<_sre.SRE_Match object; span=(11, 13), match=' 1'>
<_sre.SRE_Match object; span=(0, 1), match='1'>
解决方案
您可以使用
r'\b(?:ABC\s+)?1'
标识您要保留的字符串。请参阅正则表达式演示。
细节
\b
- 单词边界(?:ABC\s+)?
- 一个可选的子字符串:ABC
然后是 1+ 个空格1
-1
字符。
请参阅Python 演示:
import re
strs = ['1 B, 14/A - P,1C,2A,21 C - A','3P,21B,2-A,1A','3C,2-W,ABC 200','3 Z,ABC 100 - BB','ABC 300,ABC 200','ABC 200,ABC 100','1c/A,2 - z']
for s in strs:
if re.search(r'\b(?:ABC\s+)?1', s):
print(s)
输出:
1 B, 14/A - P,1C,2A,21 C - A
3P,21B,2-A,1A
3 Z,ABC 100 - BB
ABC 200,ABC 100
1c/A,2 - z
推荐阅读
- mysql - 我的 discord.js xp 机器人中的 ER_PARSE_ERROR 错误
- entity-framework - 问题:页面崩溃并消耗大量内存(Blazor + EF 3.1.1)
- php - 如何在页脚中插入 PAGE_NUMBER 和 PAGE_COUNT
- powershell - Powershell 解析日期 ISO8601
- android - seekbar onprogresschanged 中的“if 条件”未执行
- angular - Angular 9,aot,构建优化器,本地化
- python - Django:如何在模型中不相关的 2 个表之间进行查询?
- ruby-on-rails - 使用 Rails 和 React 时如何在标头中获取 JWT 令牌
- sql - Oracle 对视图使用提示索引并将其强制为基表
- javascript - 在 Javascript 中出现“意外令牌”错误