java - SwiftMessage 正则表达式
问题描述
我有以下消息:
{1:F01ANZBDEF0AXXX0509036846}{2:I103ANZBDEF0XXXXN}{4::20:TEST000001:23B:CRED:32A:141117EUR0,1:33B:EUR1000,00:50A:ANZBAU30:59:ANZBAU30:71A:SHA-}{5:{CHK:1DBBF1D81EE1}{TNG:}}
我希望它像下面那样转换,在第 4 块中有空格(即
{4: :20:TEST000001 :23B:CRED :32A:141117EUR0,1 :33B:EUR1000,00 :50A:ANZBAU30 :59:ANZBAU30 :71A:SHA -}
{1:F01ANZBDEF0AXXX0509036846}{2:I103ANZBDEF0XXXXN}{4: :20:TEST000001 :23B:CRED :32A:141117EUR0,1 :33B:EUR1000,00 :50A:ANZBAU30 :59:ANZBAU30 :71A:SHA -}{5:{CHK:1DBBF1D81EE1}{TNG:}}
我尝试使用组进行提取,然后应用正则表达式。但是,我没有成功。找不到我正在犯的错误。
public static void StringReplace() {
String data = "{1:F01ANZBDEF0AXXX0509036846}{2:I103ANZBDEF0XXXXN}{4::20:TEST000001:23B:CRED:32A:141117EUR0,1:33B:EUR1000,00:50A:ANZBAU30:59:ANZBAU30:71A:SHA-}{5:{CHK:1DBBF1D81EE1}{TNG:}}";
Pattern pat = Pattern.compile("(({1:\\w+})({2:\\w+})({4::\\d+:\\w+:\\d+.:\\w+:\\d+.:\\d+\\w+,\\d:\\d+.:\\w+,\\d+:\\d+.:\\w+:\\d+:\\w+:\\d+.:\\w+-})({5:{\\w+:.\\w+}{\\w+.}}))");
Matcher m = pat.matcher(data);
if(m.matches()) {
System.out.println(m.group(0));
}
}
提前感谢
解决方案
您刚刚匹配了字符串并简单地打印了它,但没有在两者之间引入空格的逻辑。您需要在第 4 块中添加引入空间的逻辑。
查看块 4 的预期输出,您可以首先使用此正则表达式捕获块 4,
(.*?)(\\{4.*?\\})(.*?)
然后在第 2 组内容中将冒号替换为空格冒号(:),您将其称为块 4。我看到您并没有在每个冒号中引入空格,而只是为冒号,后跟 2-3 个字符,后跟冒号。我已经在我的replaceAll()
方法中相应地实现了逻辑。
这是修改后的java代码,
public static void StringReplace() {
String data = "{1:F01ANZBDEF0AXXX0509036846}{2:I103ANZBDEF0XXXXN}{4::20:TEST000001:23B:CRED:32A:141117EUR0,1:33B:EUR1000,00:50A:ANZBAU30:59:ANZBAU30:71A:SHA-}{5:{CHK:1DBBF1D81EE1}{TNG:}}";
Pattern pat = Pattern.compile("(.*)(\\{4.*?\\})(.*)");
Matcher m = pat.matcher(data);
if (m.find()) {
String g1 = m.group(1);
String g2 = m.group(2).replaceAll(":(?=\\w{2,3}:)", " :");
String g3 = m.group(3);
System.out.println(g1 + g2 + g3);
} else {
System.out.println("Didn't match");
}
}
这将按您的预期打印以下输出,
{1:F01ANZBDEF0AXXX0509036846}{2:I103ANZBDEF0XXXXN}{4: :20:TEST000001 :23B:CRED :32A:141117EUR0,1 :33B:EUR1000,00 :50A:ANZBAU30 :59:ANZBAU30 :71A:SHA-}{5:{CHK:1DBBF1D81EE1}{TNG:}}
推荐阅读
- google-sheets - 谷歌电子表格功能为日期列生成周数?
- python - 使用 EvalML 中的 AutoML 时出现错误 AttributeError: 'DataTable' object has no attribute 'to_series'
- javascript - 创建一个函数来截断文本并在被截断的文本末尾添加“...”。JS
- python - volttron 创建具有可发现 BACnet 点的代理
- javascript - hCaptcha JavaScript API 渲染:无效容器“null”
- python - 压缩多个excel文件而不是使用python将其内容合并到一个文件中
- c# - 试图为我的游戏提高速度,但我不断收到此错误:类型“CarController”已经定义了一个名为“OnControllerColliderHit”的成员
- javascript - 如何多次解决响应
- arrays - Mongo:以数据树的形式获取数据
- tcl - 如何在 tcl 中精确复制?