Regex在预定义的字符范围之前替换所有内容-Java

Regex在预定义的字符范围之前替换所有内容-Java,java,regex,string,syntax,Java,Regex,String,Syntax,我有字符串值,我想删除或替换“TV|TH”之前的所有内容。我的问题是,尽管使用了正确的语法,字符串似乎保持不变 String test = "10TH"; String replaceBeforeSide = test.replaceAll("^\\(TH|TV)+", ""); System.out.println(replaceBeforeSide); //期望结果=“TH” 将我的评论转换为答案,以便将来的访问者能够轻松

我有字符串值,我想删除或替换“TV|TH”之前的所有内容。我的问题是,尽管使用了正确的语法,字符串似乎保持不变

 String test = "10TH";
 String replaceBeforeSide =  test.replaceAll("^\\(TH|TV)+", "");
 System.out.println(replaceBeforeSide);

//期望结果=“TH”

将我的评论转换为答案,以便将来的访问者能够轻松找到解决方案

您可以将简单的正则表达式与捕获组一起使用:

replaceBeforeSide = test.replaceAll(".+?(TH|TV)", "$1");
replaceBeforeSide = test.replaceAll(".+?(?=T[HV])", "");
甚至更短:

replaceBeforeSide = test.replaceAll(".+?(T[HV])", "$1");
使用
+?
,我们在匹配组1中捕获的
(TH | TV)
之前匹配任何字符的1+(非贪婪)

作为替代,我们只需将
$1
放回原处,以便只删除
(TH | TV)
之前的字符串

我们还可以使用前瞻和避免捕获组:

replaceBeforeSide = test.replaceAll(".+?(TH|TV)", "$1");
replaceBeforeSide = test.replaceAll(".+?(?=T[HV])", "");
如果要匹配忽略大小写,请使用内联修饰符
(?i)


仅匹配数字
^\d+(?=T[VH])
并替换为空字符串,或
^.+?(T[VH])
并替换为组1@Thefourthbird我的意思是替换/删除之前的任何内容,而不是仅将条件绑定到数字,然后使用非贪婪匹配或您不想匹配的非空白字符
^\S+(t[VH])
@Thefourthbird您的建议还删除了“TH”。我想保留这一点:D@anubhava,如果你能将你最后的一点回复作为评论发布,那么我就可以用ping作为解决方案。因此,你可以获得良好的信誉,其他人可以很容易地找到解决办法,在未来