我想在第一个数字序列结束后删除所有字符。
编辑:(抱歉含糊不清)
在第一个数字序列之后,应删除所有内容。
e.g。 QWEE1232RTY - > QWE1232
123RTY - > 123
12342 - > 12342
str.replaceAll("[^A-Z][^0-9]+","");
这应该有效,但它会产生意外的输出而不会打印重复的“2”。
My ideone code for the attempt and it's respective outputs
import java.util.*;
import java.lang.*;
import java.io.*;
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
String str = "BCTC27452ASDFCCC";
System.out.println(str.replaceAll("[^A-Z0-9]",""));
// BCTC27452ASDFCCC
System.out.println(str.replaceAll("[^A-Z0-9]$",""));
// BCTC27452ASDFCCC
System.out.println(str.replaceAll("[^A-Z][^0-9]",""));
// BCTC2745SDFCCC
System.out.println(str.replaceAll("[^A-Z][^0-9]+",""));
// Closest Output - "BCTC2745" (why 2nd "2" not printed)
System.out.println(str.replaceAll("[^A-Z][^0-9]*",""));
// BCTC
System.out.println(str.replaceAll("[^A-Z][^0-9+]",""));
// BCTC2745SDFCCC
System.out.println(str.replaceAll("[^A-Z][^0-9*]",""));
// BCTC2745SDFCCC
System.out.println("Expected Output: BTC27452");
}
}
答案 0 :(得分:5)
你的意思是在一系列字母后跟一系列数字后替换所有内容?只需查找并仅使用匹配替换字符串:
str.replaceAll("^([A-Z]+[0-9]+).*","$1")
所以基本上你要查找一个至少有一个大写字符([A-Z]+
)的序列,后跟一个从输入开头开始的至少一个数字([0-9]+
)的序列({{ 1}})后面跟着任何东西(^
)。您将序列捕获到一个组中,并仅将该字符串替换为该组(在替换字符串中引用第一个捕获组的.*
)。