【问题标题】:Regular Expression for EDI file [closed]EDI 文件的正则表达式 [关闭]
【发布时间】:2018-06-15 03:35:31
【问题描述】:

我想在具有以下格式的 edi 文件中获取一个值

\nRJCK3:0*20180105*U*127.35
\nRJCK3:0*20180105*B*127.35 

我想要一个值 U 在第一种情况下,它位于RJC*K3 之后的第二和第三颗星之间,并且想要第二个字符串中的 B

确切地说,想要从字符串中获取单个字符,其中该字符将位于RJC*K3(静态值)的第二和第三星(*)之间。

【问题讨论】:

  • 请分享您已经尝试过的内容
  • 那是你的文字,还是星星真的是其他东西的占位符?
  • \nRJCK3:0*20180105*U*127.35 , \nRJCK3:0*20180105*B*127.35 这上面两个是2个用例。我想要第一种情况下的字母“U”,并且想要第二个字符串中的字母 B
  • 您想知道 3 颗星之间到底是什么?总是大写字母吗?
  • 由于 EDI 行应该有常量分隔符,你可以用“*”分割行并从同一个索引中获取项目?

标签: java regex edi


【解决方案1】:

你可以使用经典的Pattern matching方式:

String str1 = "\\nRJC*K3:0*20180105*U*127.35";
Matcher m = Pattern.compile("RJC\\*K3.*\\*(\\w)\\*.*").matcher(str1);
String res1 = m.find() ? m.group(1) : "";
System.out.println(res1);       // U

但是如果你想要的字母前面总是有相同数量的*,你可以很容易地分割并取第三部分:

String str2 = "\\nRJC*K3:0*20180105*G*127.35";
String res2 = str2.split("\\*")[3];
System.out.println(res2);        // G

【讨论】:

  • Pattern.compile("RJC\*K3.*\*(\\w)\*.*").matcher(str1);这是有效的。谢谢
【解决方案2】:

没有必要和edi文件打架,你可以使用可用的库。

请看https://github.com/imsweb/x12-parser/

RJCloop.getSegment("RJC").getElementValue("RJC02")

可以为您提供所需的价值。

【讨论】:

    猜你喜欢
    • 2015-09-17
    • 2020-08-05
    • 2012-10-23
    • 1970-01-01
    • 1970-01-01
    • 2015-04-27
    • 1970-01-01
    • 2012-04-08
    相关资源
    最近更新 更多