Python正则与Pandas方案:校验指定序列在分隔符前后的存在性
字符串校验方案
需求说明
现有字符串格式示例:ID123456_SIT,UAT,其中ID######为固定硬编码前缀。需要校验字符串满足:以ID123456_开头,且逗号分隔的任意位置(包括无逗号的单值场景、多逗号场景)存在SIT或UAT。
以下场景均需匹配:
ID123456_SIT,UATID123456_UAT,SITID123456_SITID123456_UATID123456_TRA,SIT,UAT
原正则(^ID123456_)(SIT|UAT),(SIT|UAT)仅支持前两种双值场景,无法适配单值及多逗号场景,以下提供两种解决方案:
方案一:正则表达式
使用更灵活的正则覆盖所有场景,表达式如下:
^ID123456_(?:[^,]*?(SIT|UAT)[^,]*)$
逻辑说明
^ID123456_:强制匹配开头的固定前缀[^,]*?:匹配任意非逗号字符(非贪婪模式,避免跳过目标值)(SIT|UAT):匹配目标值SIT或UAT[^,]*:匹配后续任意非逗号字符(包括逗号分隔的其他项)- 整体确保字符串中至少存在一个SIT或UAT,且前缀正确
Python示例代码
import re # 定义正则模式 pattern = r'^ID123456_(?:[^,]*?(SIT|UAT)[^,]*)$' # 测试用例 test_strings = [ 'ID123456_SIT,UAT', 'ID123456_UAT,SIT', 'ID123456_SIT', 'ID123456_UAT', 'ID123456_TRA,SIT,UAT' ] # 批量校验 for s in test_strings: match_result = re.fullmatch(pattern, s) print(f"{s} - {'匹配成功' if match_result else '匹配失败'}")
方案二:Pandas列校验
如果需要在Pandas数据框中批量校验某列,可通过自定义函数实现:
Python示例代码
import pandas as pd # 构造测试数据 df = pd.DataFrame({ 'env_str': [ 'ID123456_SIT,UAT', 'ID123456_UAT,SIT', 'ID123456_SIT', 'ID123456_UAT', 'ID123456_TRA,SIT,UAT', 'ID123456_TRA', # 不匹配示例 'OTHER_PREFIX_SIT' # 不匹配示例 ] }) # 定义校验函数 def validate_env(s): # 先检查前缀是否正确 if not s.startswith('ID123456_'): return False # 分割出逗号分隔的项 env_items = s.split('_')[1].split(',') # 检查是否存在SIT或UAT return any(item in {'SIT', 'UAT'} for item in env_items) # 生成校验结果列 df['is_valid'] = df['env_str'].apply(validate_env) # 输出结果 print(df)
内容的提问来源于stack exchange,提问作者supermariowhan
相关产品推荐
相关产品推荐

