我有像这样的字符串
S103FYUN031800644100
5S103LKAAN031801261400
32S103AKJA031804534600
从上面的字符串中,我必须使用正则表达式从上面的每个字符串中提取粗体部分,有人知道如何去做吗?
到目前为止我已经尝试过了
String acc = "S103L5AN031801261400";
String regex = ".*S(.{3})";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(acc);
while(matcher.find()){
Logger.debug("Match:", matcher.group());
}
但我还是没能做到正确。
最佳答案
您可以使用正则表达式,[A-Za-z]\\d{3}
,这意味着字母表后跟 3 位数字。
如果您希望子字符串仅以 S
或 s
开头,请使用 [Ss]\d{3}
或 (?i)s\\d{3}
代替。请注意,(?i)
使模式不区分大小写。
如果您希望子字符串仅以 S
开头,请改用 S\d{3}
。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Stream;
public class Main {
public static void main(String[] args) {
Stream.of(
"S103FYUN031800644100",
"5S103LKAAN031801261400",
"32S103AKJA031804534600"
).forEach(s -> System.out.println(s + " => " + getSubstr(s)));
}
static String getSubstr(String s) {
Matcher matcher=Pattern.compile("[A-Za-z]\\d{3}").matcher(s);
String substr="";
if(matcher.find()) {
substr = matcher.group();
}
return substr;
}
}
输出:
S103FYUN031800644100 => S103
5S103LKAAN031801261400 => S103
32S103AKJA031804534600 => S103
关于java - 如何使用正则表达式java从字符串中提取第一个字母和后面的三个数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67124203/