java - 如何使用正则表达式java从字符串中提取第一个字母和后面的三个数字

标签 java regex

我有像这样的字符串

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 位数字。

如果您希望子字符串仅以 Ss 开头,请使用 [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/

相关文章:

java.lang.OutOfMemory错误: Java heap space error during bulk insert to mysql database?

python - 无法在python3中使用正则表达式搜索 '\\n'

c# - 正则表达式匹配可选组

java - 将具有特殊 unicode 的文本转换为普通文本 (java)

java - 在域模型中的 JPA 拼写灾难的上下文中天真地使用 java 枚举的序号

java - 将文件解密到列表中时被分割的行

java - 如何在 JavaFX 中的另一个 Controller 中使用类似(面板、anchorpane)的组件

java - 在 Struts2 中如何在没有参数出现在 URL 中的情况下进行永久重定向(状态代码 301)

regex - 正则表达式从最接近末尾的字符串中获取子字符串

javascript - 大括号、等号和 JavaScript 正则表达式