我目前有以下代码,允许我从字符串中找到匹配项。
我需要能够找到与64x
类似的所有字词并将其拆分为令牌,因此我会将64
和x
作为输出。
我已经看过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());
}
答案 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