从Java中的字符串正则表达式获取数字

时间:2014-06-25 17:21:46

标签: java regex regular-language

嗨,我不太了解正则表达式,我试图从字符串中获取数字" glm = 4563125 @",有人可以帮助我。数字的位数可以变化,因此它不具体的数字位数。感谢。

3 个答案:

答案 0 :(得分:2)

使用Matcher类匹配并提取这些分隔符之间的子字符串。

String s  = "glm=4563125@ abcd=efgh @pref= @ alt=?@Altype=wxyz! barglm=1234@";
Pattern p = Pattern.compile("\\bglm=(\\d+)@");
Matcher m = p.matcher(s);
while (m.find()) {
  System.out.println(m.group(1)); //=> "4563125"
}

注意:使用单词边界\b断言,一方有单词字符,另一方面没有或在字符串的开头或结尾它以单词字符开头或结尾。

答案 1 :(得分:0)

根据评论,提取“glm =”和“@”之间的数字

public String extractNumber(String input) {
    Pattern p = Pattern.compile("glm=(\\d+)[@]?");
    Matcher m = p.matcher(input);
    if (m.find()) return m.group(1);
    else return null;
}

阐释:

正则表达式glm =(\ d +)[@]?在数字周围插入一个捕获组,并搜索“glm =”和“@”之间的数字,问号使“@”字符可选(注意:你的评论非常误导,这是可选的,所以如果你不喜欢不想要这个,只需删除问号)

Pattern和Matcher用于在输入字符串中搜索匹配的regex表达式,return语句返回找到的第一个捕获组。

我希望这就是你要找的东西。

答案 2 :(得分:0)

您可以使用以下正则表达式:

(\d+)

Regular expression visualization

enter image description here

Debuggex Demo

String input = "glm=4563125@";
Pattern p = Pattern.compile("(\\d+)");
Matcher m = p.matcher(input);

if (m.find()) {
    System.out.println(m.group(1)); // Displays 4563125
}