正则表达式获得字符串中的第一个数字: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()+" "); }