我有一些字符串值,我想删除或替换“TV|TH”之前的所有内容。我的问题是,尽管使用了正确的语法,但字符串似乎保持不变。
String test = "10TH";
String replaceBeforeSide = test.replaceAll("^\\(TH|TV)+", "");
System.out.println(replaceBeforeSide);
//期望结果 = "TH";
最佳答案
将我的评论转换为答案,以便 future 的访问者可以轻松找到解决方案。
您可以使用带有捕获组的简单正则表达式:
replaceBeforeSide = test.replaceAll(".+?(TH|TV)", "$1");
或更短:
replaceBeforeSide = test.replaceAll(".+?(T[HV])", "$1");
使用.+?
,我们在匹配我们在组 #1 中捕获的 (TH|TV)
之前匹配 1+ 个任何字符(非贪婪)。
在替换过程中,我们只需将 $1
放回去,以便仅删除 (TH|TV)
之前的字符串。
我们还可以使用前瞻并避免捕获组:
replaceBeforeSide = test.replaceAll(".+?(?=T[HV])", "");
如果你想匹配忽略大小写,那么使用内联修饰符(?i)
:
replaceBeforeSide = test.replaceAll("(?i).+?(?=T[HV])", "");
关于java - 正则表达式替换预定义字符范围之前的所有内容 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63337410/