在 Java 中使用正则表达式分割字符串

问题描述 投票:0回答:5

任何人都可以帮助我使用一些正则表达式吗?

我想把下面的字符串拆分成一个数字,字符串数字

"810LN15"

1 种方法需要返回 810,另一种方法需要 LN,另一种方法应返回 15。

唯一真正的解决方案是使用正则表达式,因为数字的长度会增长

我可以使用什么正则表达式来适应这个?

java regex
5个回答
20
投票

String.split
不会给你想要的结果,我猜应该是“810”,“LN”,“15”,因为它必须寻找一个令牌来分割并删除该令牌。

尝试使用

Pattern
Matcher
,使用此正则表达式:
(\d+)|([a-zA-Z]+)
,它将匹配任何数字和字母序列并获得不同的数字/文本组(即“AA810LN15QQ12345”将导致组“AA”、“ 810”、“LN”、“15”、“QQ”和“12345”)。

示例:

Pattern p = Pattern.compile("(\\d+)|([a-zA-Z]+)");
Matcher m = p.matcher("810LN15");
List<String> tokens = new LinkedList<String>();
while(m.find())
{
  String token = m.group( 1 ); //group 0 is always the entire match   
  tokens.add(token);
}
//now iterate through 'tokens' and check whether you have a number or text

10
投票

在 Java 中,与大多数正则表达式风格一样(Python 是一个值得注意的例外),

split()
正则表达式在找到匹配项时不需要消耗任何字符。在这里,我使用向前查找和向后查找来匹配一侧有数字而另一侧有非数字的任何位置:

String source = "810LN15";
String[] parts = source.split("(?<=\\d)(?=\\D)|(?<=\\D)(?=\\d)");
System.out.println(Arrays.toString(parts));

输出:

[810, LN, 15]

7
投票

(\\d+)([a-zA-Z]+)(\\d+)
应该可以解决问题。第一个捕获组将是第一个数字,第二个捕获组将是中间的字母,第三个捕获组将是第二个数字。双反斜杠用于 java。


0
投票

这正是你们正在寻找的东西

        Pattern p = Pattern.compile("(([a-zA-Z]+)|(\\d+))|((\\d+)|([a-zA-Z]+))");
        Matcher m = p.matcher("810LN15");
        List<Object> tokens = new LinkedList<Object>();
        while(m.find())
        {
          String token = m.group( 1 ); 
          tokens.add(token);
        }
        System.out.println(tokens);

0
投票

如果你想分离字符串字符和数字。你可以使用以下正则表达式:

        String str = "810LN15";
        String []arr=str.split("[A-Za-z]");
        // arr = "810", "", "", "15"
        int sum=0;
        for(int i=0;i<arr.length;i++){
            if(!arr[i].equals(""))
            sum+=Integer.parseInt(arr[i]);
        }
        return sum;

 

© www.soinside.com 2019 - 2024. All rights reserved.