java - Java Regex - 如何替换模式以开头和结尾
问题描述
我有2个场景:
- 字符串以 Sample Country 开头!即样本国家!测试数据
我想要一个正则表达式来替换 Sample Country !使用空字符串,此处的国家/地区不固定,可以是美国、法国等
我试过:
System.out.println(str.replaceAll("^(Sample[^!]+!)", ""));
我得到输出
! Test Data
而我只想
Test Data
字符串以 Sample Country 结尾!即测试数据样本国家! 在这里我也只想
测试数据
有人可以帮助提供正确的正则表达式和解释。非常感谢
解决方案
编辑 :
让我们做一个更好的方法。您将不仅有 2 个案例 您将有 3 个案例
(模式+数据) ---> ^Sample[^!]+! (模式) ([^!]) (数据)
(数据+模式) --->([^!])(数据) 样本[^!]+!$ (模式)
(模式 + 数据 + 模式) ---> (^Sample[^!]+! (模式) ([^!]) (数据) Sample[^!]+!$ (模式)
所以我们必须用正则表达式检查字符串中的所有情况。我们需要正则表达式中的 OR 案例,它是“|” 另一件事是我们必须避免不匹配的情况必须被忽略,这里描述的是 (?:(regex))
public class HelloWorld {
public static void main(String[] args) {
String[] testcases = new String[] {
"Sample foo ! Test1 Data",
"Sample bar ! Test2 Data",
"Test3 Data Sample foo !",
"Test4 Data Sample bar !",
"Sample bar ! Test5 Data Sample bar !"
};
for (String str: testcases) {
System.out.println(str.replaceAll("(?:(^Sample[^!]+!([^!])))|(?:(([^!])Sample[^!]+!$))|(?:(^Sample[^!]+!([^!]))Sample[^!]+!$)", "$2$4").trim());
}
}
我们使用您的正则表达式并在分组数据后创建一个新的正则表达式将位于 ($2,$4) 组,因为我们将字符串替换为第 2 组和第 4 组值。我希望这将有所帮助。 在线编译代码
推荐阅读
- pyspark - PySpark 数据框下推
- elasticsearch - 如何保留某个索引比另一个更长的时间?
- python-3.x - model.fit_generator 中的“TypeError:'NoneType' 对象不可调用”
- c# - 有没有办法在 Linqpad 中创建 DbSet?
- python - 根据行中的索引添加列
- opencv - Rasberry pi 交叉编译设置中的 Config.cmake 缺失错误
- javascript - 如何从 React Burger 菜单中删除左侧阴影?
- javascript - 将箭头函数映射到映射中(映射不是函数)
- c# - WebAPI 切换数据库集合
- azure - azure function 和 azure static web app 之间的区别?这个怎么运作?