java - 正则表达式帮助而不是在java中拆分
问题描述
我有一个需要替换子字符串的要求。
输入字符串为:
true-[Test5]procedure4.spec@john:380733712-1
预期的输出字符串是:
true-[Test5]procedure4.spec@X:380733712-1
单词 john 必须在这里替换为字符 X。为此,我已经实现了如下的 java 代码。
import java.util.Arrays;
import java.util.List;
public class Regex {
public static void main(String[] args) {
List<String> variableList = Arrays.asList("true-[Test5]procedure4.spec@mohan:180713133712267-1");
for (String item : variableList) {
if (item.contains("@") && item.contains(":") && item.split("@").length >= 1
&& item.split(":").length >= 1) {
StringBuilder firstString = new StringBuilder(item.split("@")[0] != null ? item.split("@")[0] : "");
StringBuilder secondString = new StringBuilder(item.split(":")[1] != null ? item.split(":")[1] : "");;
System.out.println(firstString + "@X:" + secondString);
}
}
}
}
我是正则表达式的新手。我想用java中的Pattern和Matcher用正则表达式替换上面的代码。
解决方案
利用
List<String> variableList = Arrays.asList("true-[Test5]procedure4.spec@mohan:180713133712267-1", "true-[Test5]procedure4.spec@Step2-1");
for (String item : variableList) {
System.out.println(item + " => " + item.replaceFirst("@[^:]+:", "@X:"));
}
请参阅Java 演示。输出:
true-[Test5]procedure4.spec@mohan:180713133712267-1 => true-[Test5]procedure4.spec@X:180713133712267-1
true-[Test5]procedure4.spec@Step2-1 => true-[Test5]procedure4.spec@Step2-1
细节
@
- 一个@
字符[^:]+
- 一个否定字符类,匹配除 . 之外的 1 个或多个字符:
。
在此处查看在线正则表达式演示。
您还可以使用捕获组/反向引用来避免重复@
:
.replaceFirst("(@)[^:]+:", "$1X:")
如果您必须匹配多个@
,例如([@#])
匹配@
或,这将很有帮助#
。
推荐阅读
- ssh - 可以在 SSRS 中使用 ODBC 通过 SSH 隧道连接到 MySQL 数据库吗?
- python - 用字典替换熊猫中给定列的值
- javascript - 在 JavaScript 中修改变量的函数类型是什么?
- electron - 尝试在 Whatsapp 中打开新聊天而不重新加载页面时出错
- amazon-web-services - Spark 作业失败,并从 AWS EMR 写入 S3 出现未知错误
- javascript - Express 路由器将 style.css 作为 reqeuest.params 传递,并且可能调用路由两次?
- unit-testing - NUnit with .NetCore - 我可以将测试结果写入 xml 或 trx 文件吗
- angular - 尝试实施本地存储时我的网站无法加载
- asp.net-mvc - 如何在剃刀视图中访问会话对象属性?
- spring-boot - 在 Spring Boot 应用程序中使用来自 Confluent 的 Schema Registry 与 Avro 和 Kafka