EDI文件正则表达式需求:提取RJC*K3后第2与第3个*间的字符
提取EDI字符串指定位置字符的解决方案
需求场景:从以下EDI格式字符串中提取目标字符:
RJCK3:0*20180105*U*127.35 RJCK3:0*20180105*B*127.35需要提取每行中
RJCK3:之后,第2个与第3个*之间的单个字符(第一行取U,第二行取B)
嘿,我来给你分享两个实用的方法,轻松搞定这个提取需求:
方法一:字符串分割法
这是最直接的方式,利用字符串分割功能按*拆分后,直接取对应位置的元素。以Python为例:# 示例输入行 line1 = "RJCK3:0*20180105*U*127.35" line2 = "RJCK3:0*20180105*B*127.35" # 按*分割字符串,取索引为2的元素(索引从0开始计数) target_char1 = line1.split('*')[2] target_char2 = line2.split('*')[2] print(target_char1) # 输出:U print(target_char2) # 输出:B只要你的EDI格式固定不变,这个方法简单高效,完全能满足需求。
方法二:正则表达式匹配
如果需要更严谨的匹配(比如确保前缀是RJCK3:,避免格式异常时提取错误),可以用正则精准定位目标字符:import re # 正则模式:匹配RJCK3:开头,跳过前两个*,捕获中间的单个字符 regex_pattern = r'RJCK3:.*?\*.*?\*([A-Z])\*' line1 = "RJCK3:0*20180105*U*127.35" line2 = "RJCK3:0*20180105*B*127.35" match_result1 = re.search(regex_pattern, line1) match_result2 = re.search(regex_pattern, line2) if match_result1: print(match_result1.group(1)) # 输出:U if match_result2: print(match_result2.group(1)) # 输出:B这个方法适配性更强,即使字符串前后有微小变化,只要核心格式符合,就能准确提取目标字符。
内容的提问来源于stack exchange,提问作者Krishna
相关产品推荐
相关产品推荐

