如何匹配字符串中所有不以英语字母开头的数字的所有组合,在Java中都是常规匹配

来源:爱站网时间:2021-09-27编辑:网友分享
我有一个类似String str的字符串=“ 305556710S或100596269C或CN111111111”;我只想匹配此字符串中以数字开头或以数字开头并以英语结尾的字符...

问题描述


我有一个像这样的字符串

String str = "305556710S  or 100596269C OR CN111111111";

我只想匹配此字符串中以数字开头或以数字开头并以英文字母结尾的字符,然后在匹配的字符前面加上两个“ ??”字符。我写一个Patern像

    Pattern pattern = Pattern.compile("^[0-9]{1,10}[A-Z]{0,1}", Pattern.CASE_INSENSITIVE);
    Matcher matcher = pattern.matcher(str);
    while (matcher.find()) {
        int start = matcher.start();
        int end = matcher.end();
        String matchStr = matcher.group();
        System.err.println(matchStr);
    }

但是它只能匹配第一个字符“ 305556710S”。但是如果我修改模式

 Pattern pattern = Pattern.compile("[0-9]{1,10}[A-Z]{0,1}", Pattern.CASE_INSENSITIVE);

它将匹配“ 305556710S”,“ 100596269C”,“ 111111111”。但是“ 111111111”的前缀是英文字符“ CN”,这不是我的目标。我只想匹配“ 305556710S”和“ 100596269C”并添加两个“ ??”匹配字符之前的字符。有人可以帮我吗?

思路:


我认为您需要使用单词边界。试试这个改变的模式:

"\\b[0-9]{1,10}[A-Z]{0,1}\\b"

此打印输出:

305556710S
100596269C

上一篇:为什么我在Java中遇到堆空间错误?

下一篇:Java仅通过一个对象发送类参数

您可能感兴趣的文章

相关阅读

热门软件源码

最新软件源码下载