正则表达式获得字符串中的第一个数字:100 2011-10-20 14:28:55

我是正则表达式的新手,并且想知道如何才能获得字符串中的第一个数字,如100 2011-10-20 14:28:55。 在这种情况下,我希望它返回100,但数字也可能更短或更长。

我在考虑类似[0-9] +的东西,但它分别需要每一个数字(100,2001,10,…)

谢谢。

尝试这匹配字符串中的第一个数字(可能不在字符串的开头):

String s = "2011-10-20 525 14:28:55 10"; Pattern p = Pattern.compile("(^|\\s)([0-9]+)($|\\s)"); Matcher m = p.matcher(s); if (m.find()) { System.out.println(m.group(2)); } 
 /^[^\d]*(\d+)/ 

这将从头开始,跳过任何非数字,并匹配它找到的第一个数字序列

编辑:这个正则表达式将匹配第一组数字,但正如其他答案中所指出的,如果您知道数字位于字符串的开头,则parseInt是更好的解决方案

只是

 ([0-9]+) .* 

如果你总是在第一个数字后面有空格,这将有效

假设前两个数字之间总是有空格,那么

 preg_match('/^(\d+)/', $number_string, $matches); $number = $matches[1]; // 100 

但对于这样的事情,你最好使用简单的字符串操作:

 $space_pos = strpos($number_string, ' '); $number = substr($number_string, 0, $space_pos); 

正则表达式计算量很大,如果可能应该避免使用。

下面的代码可以解决问题。

 Integer num = Integer.parseInt("100 2011-10-20 14:28:55"); 

[0-9]表示数字0-9可以使用+表示1次或更多次。 如果您使用[0-9] {3}将获得3个数字

尝试^(?'num'[0-9]+).*$强制它从头开始,读取一个数字,将其存储到’num’并使用余数而不进行绑定。

即使字符串不以数字开头,此字符串扩展也能正常工作。 在每种情况下返回1234 – “1234asdfwewf”,“%sdfsr1234”“###1234”

  public static string GetFirstNumber(this string source) { if (string.IsNullOrEmpty(source) == false) { // take non digits from string start string notNumber = new string(source.TakeWhile(c => Char.IsDigit(c) == false).ToArray()); if (string.IsNullOrEmpty(notNumber) == false) { //replace non digit chars from string start source = source.Replace(notNumber, string.Empty); } //take digits from string start source = new string(source.TakeWhile(char.IsDigit).ToArray()); } return source; } 
 public static void main(String []args){ Scanner s=new Scanner(System.in); String str=s.nextLine(); Pattern p=Pattern.compile("[0-9]+"); Matcher m=p.matcher(str); while(m.find()){ System.out.println(m.group()+" "); }