Using regular expressions to extract a value in Java
Использование регулярных выражений для извлечения значения в Java
У меня есть несколько строк в приблизительном виде:
[some text] [some number] [some more text]
Я хочу извлечь текст в [некотором количестве], используя классы регулярных выражений Java.
Я примерно знаю, какое регулярное выражение я хочу использовать (хотя все предложения приветствуются). Что меня действительно интересует, так это вызовы Java для получения строки регулярного выражения и использования ее в исходных данных для получения значения [некоторого числа].
Я должен добавить, что меня интересует только одно [некоторое число] (в основном, первый экземпляр). Исходные строки короткие, и я не собираюсь искать множественные вхождения [некоторого числа].
Переведено автоматически
Ответ 1
Полный пример:
privatestaticfinalPatternp= Pattern.compile("^([a-zA-Z]+)([0-9]+)(.*)"); publicstaticvoidmain(String[] args) { // create matcher for pattern p and given string Matcherm= p.matcher("Testing123Testing");
// if an occurrence if a pattern was found in a given string... if (m.find()) { // ...then you can use group() methods. System.out.println(m.group(0)); // whole matched expression System.out.println(m.group(1)); // first expression from round brackets (Testing) System.out.println(m.group(2)); // second one (123) System.out.println(m.group(3)); // third one (Testing) } }
Поскольку вы ищете первое число, вы можете использовать такое регулярное выражение:
^\D+(\d+).*
и m.group(1) вернет вам первое число. Обратите внимание, что числа со знаком могут содержать знак минус:
У Аллена в основном есть код Java, так что вы можете его использовать. Однако его выражение совпадает только если вашим числам предшествует только поток символов word.
"(\\d+)"
должен быть в состоянии найти первую строку цифр. Вам не нужно указывать, что стоит перед ней, если вы уверены, что это будет первая строка цифр. Аналогично, нет смысла указывать, что стоит за ним, если вы этого не хотите. Если вам нужно просто число и вы уверены, что это будет первая строка из одной или нескольких цифр, то это все, что вам нужно.
Если вы ожидаете, что оно будет заменено пробелами, это сделает его указание еще более четким
"\\s+(\\d+)\\s+"
могло бы быть лучше.
Если вам нужны все три части, этого хватит:
"(\\D+)(\\d+)(.*)"
РЕДАКТИРОВАТЬ Выражения, приведенные Аллейном и Джеком, предполагают, что вам нужно указать некоторое подмножество нецифровых значений, чтобы получить цифры. Если вы сообщите движку регулярных выражений, что ищете \d, то он проигнорирует все, что находится перед цифрами. Если выражение J или A соответствует вашему шаблону, то полное совпадение равновходной строке. И нет причин указывать это. Это, вероятно, замедляет точное совпадение, если оно не игнорируется полностью.
Ответ 4
В дополнение к шаблону, класс Java String также имеет несколько методов, которые могут работать с регулярными выражениями, в вашем случае код будет: