使用RE正则表达式筛选需求字符组合表达式
工作需要从一些标注里面提取复用段编号,格式如下,字母M,4位或者5位数字,最后一位可能A-D字符。
最开始使用str.find函数来判断字符M存在,并且"-"存在,然后就进行查找提取,提取到不符合要求的组合。无-字符都没有提取出来。
再次使用re.search进行判断和字符位置数字比较,但是没有找到返回None, 然后运行报错。
想到没有找到字符和None直接比较。再进行下一步处理。就可以正常输出符合要求的字符组合了。
详细代码如下
import re #Python3 标准库,正则表达式处理函数
# 定义ANSI转义序列开始红色文本的代码
red = '\033[31m'
green = '\033[32m'
blue = '\033[34m'
# 定义ANSI转义序列结束颜色的代码
c_end = '\033[0m'
test=['test','MS02','MM','M12345----','M1234D----','M67890复用段','M12SS','NCPM']
pattern1 = r'M\d' #匹配M1 ,字母M以及至少一位数字。 排除只单独字符M.
pattern2 = r'M[0-9]+[ABCD]|M\d+' #匹配M12345A,M12345B,M12345C,M12345D,或者M12345,M1
print(f"方案一,使用find函数")
for f in test:
start= f.find("M")
if start >-1:
end=f.find("-",start)
if end>-1 :
print(f"{red}找到符合复用段:{f[start:end]}{c_end}")
print(f"方案二,使用re.search函数先判断")
for f in test:
if re.search(pattern1, f) is None:
print(f"没有找到复用段:{f}")
else:
print(f"{red}找到符合复用段:{re.search(pattern2, f).group()}{c_end}")
print(f"方案三,使用re.search函数先判断,not")
for f in test:
if not re.search(pattern1, f) is None:
print(f"{red}NOT 找到符合复用段:{re.search(pattern2, f).group()}{c_end}")
else:
print(f"NOT 没有找到复用段:{f}")
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。