正则表达式展望未来将字符串分成令牌

时间:2016-10-24 11:39:15

标签: java regex

我目前有以下代码,允许我从字符串中找到匹配项。

我需要能够找到与64x类似的所有字词并将其拆分为令牌,因此我会将64x作为输出。

我已经看过regexs lookahead并且这并没有解决问题,有没有办法在不创建新的arraylist来存储类似于64x的匹配然后将它们拆分的情况下执行此操作?

        String input = "Hello world 65x";

        ArrayList<String> userInput = new ArrayList<>();

        Matcher isMatch = Pattern.compile("[0-9]*+[a-zA-Z]")
                .matcher(input);
        while (isMatch.find()) {
            userInput.add(isMatch.group());
        }

3 个答案:

答案 0 :(得分:1)

无需前瞻,您可以使用嵌套捕获的组:

Matcher isMatch = Pattern.compile("\\b([0-9]+)([a-zA-Z])\\b");

第1组将包含65,第2组将包含x

最好在两边添加\\b(字边界)以避免匹配abc56xyz

答案 1 :(得分:1)

您只需使用Matcher.group(int)即可。这使您可以提取匹配文本的片段。了解中型集团here。包含捕获组的正则表达式是Rails.application.routes.draw do get 'songs/index' get 'songs/create' get 'songs/delete' root 'songs#index' resources :songs end (由anubhava给出)。

答案 2 :(得分:1)

您可以尝试以下正则表达式:

\b(\p{Digit}+)(\p{Alpha})\b

此外,如果您打算经常使用正则表达式,建议使用常量以避免每次重新编译它,例如:

private static final Pattern REGEX_PATTERN = 
        Pattern.compile("\\b(\\p{Digit}+)(\\p{Alpha})\\b");

public static void main(String[] args) {
    String input = "Hello world 65x";
    Matcher matcher = REGEX_PATTERN.matcher(input);
    while (matcher.find()) {
        System.out.println(matcher.group(1));
        System.out.println(matcher.group(2));
    }
}

输出:

65
x