Regex для получения первого числа в строке с другими символами
Я новичок в регулярных выражениях, и мне было интересно, как я могу получить только первое число в строке, как 100 2011-10-20 14:28:55
. В этом случае я бы хотел, чтобы он возвращал 100
, но число также может быть короче или длиннее.
Я думал о чем-то вроде [0-9]+
, но он принимает каждое число отдельно (100,2001,10,...)
Спасибо.
Ответы
Ответ 1
Попробуйте это для первого номера в строке (который не может быть в начале строки):
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));
}
Ответ 2
/^[^\d]*(\d+)/
Это начнется с самого начала, пропустит любые цифры и сопоставит первую последовательность найденных цифр.
EDIT:
это Regex будет соответствовать первой группе чисел, но, как указано в других ответах, parseInt является лучшим решением, если вы знаете, что число находится в начале строки
Ответ 3
Просто
([0-9]+) .*
Если у вас всегда есть пробел после первого номера, это будет работать
Ответ 4
Предполагая, что между первыми двумя числами всегда есть пробел, то
preg_match('/^(\d+)/', $number_string, $matches);
$number = $matches[1]; // 100
Но для чего-то подобного вам лучше использовать простые строковые операции:
$space_pos = strpos($number_string, ' ');
$number = substr($number_string, 0, $space_pos);
Regexs являются вычислительно дорогостоящими, и их следует избегать, если это возможно.
Ответ 5
приведенный ниже код выполнит трюк.
Integer num = Integer.parseInt("100 2011-10-20 14:28:55");
Ответ 6
Это расширение строки отлично работает, даже если строка не начинается с номера.
return 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;
}
Ответ 7
[0-9] означает, что числа 0-9 можно использовать + означает 1 или более раз. если вы используете [0-9] {3}, вы получите 3 номера
Ответ 8
Попробуйте ^(?'num'[0-9]+).*$
, который заставляет его начинать с самого начала, читать число, хранить его до "num" и потреблять остаток без привязки.
Ответ 9
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()+" ");
}