У меня есть несколько строк в грубой форме:
[some text] [some number] [some more text]
Я хочу извлечь текст в [некоторое количество], используя классы Java Regex.
Я примерно знаю, какое регулярное выражение я хочу использовать (хотя все предложения приветствуются). Что меня действительно интересует, так это вызовы Java, чтобы взять строку регулярного выражения и использовать ее в исходных данных для получения значения [some number].
РЕДАКТИРОВАТЬ: я должен добавить, что меня интересует только один [некоторый номер] (в основном, первый экземпляр). Исходные строки короткие, и я не собираюсь искать несколько вхождений [некоторого числа].
Ответы:
Полный пример:
Поскольку вы ищете первый номер, вы можете использовать такое регулярное выражение:
и
m.group(1)
вернет вам первый номер. Обратите внимание, что числа со знаком могут содержать знак минус:источник
Вывод:
источник
У Аллена в основном есть код Java, так что вы можете его использовать. Однако его выражение совпадает только в том случае, если вашим числам предшествует только поток слов.
должен быть в состоянии найти первую строку цифр. Вам не нужно указывать, что перед ним, если вы уверены, что это будет первая строка цифр. Кроме того, нет смысла указывать, что после этого, если вы этого не хотите. Если вам просто нужен номер, и вы уверены, что это будет первая строка из одной или нескольких цифр, то это все, что вам нужно.
Если вы ожидаете, что он будет смещен пробелами, это сделает его еще более отчетливым
может быть лучше.
Если вам нужны все три части, это будет делать:
РЕДАКТИРОВАТЬ Выражения, данные Алленом и Джеком, предполагают, что вам нужно указать некоторое подмножество нецифровых чисел, чтобы захватить цифры . Если вы скажете движку регулярных выражений, что ищете,
\d
он будет игнорировать все до цифр. Если выражение J или А в приспосабливает свой образец, то весь матч равен в строке ввода . И нет никаких оснований указывать это. Это, вероятно, замедляет чистое совпадение, если не полностью игнорируется.источник
В дополнение к Pattern класс Java String также имеет несколько методов, которые могут работать с регулярными выражениями, в вашем случае код будет:
где
\\D
не цифраисточник
В Java 1.4 и выше:
источник
Эта функция собирает все подходящие последовательности из строки. В этом примере он берет все адреса электронной почты из строки.
Для
message = "adf@gmail.com, <another@osiem.osiem>>>> lalala@aaa.pl"
этого создадим список из 3 элементов.источник
Попробуйте сделать что-то вроде этого:
источник
.+
жадно потребляет персонажей,\d+
только захватывает"3"
из"123"
. Кроме того, внутри строковых литералов вы должны экранировать обратную косую черту (ваш пример не скомпилируется).Простое решение
Решение в классе Util
источник
Смотри, ты можешь сделать это используя StringTokenizer
Поскольку мы берем эти числовые данные в трех различных переменных, мы можем использовать эти данные в любом месте кода (для дальнейшего использования)
источник
Как насчет того,
[^\\d]*([0-9]+[\\s]*[.,]{0,1}[\\s]*[0-9]*).*
я думаю, что он позаботится о числах с дробной частью. Я включил пробелы и включил в,
качестве возможного разделителя. Я пытаюсь получить числа из строки, включая числа с плавающей запятой, и с учетом того, что пользователь может ошибиться и включить пробелы при наборе номера.источник
Иногда вы можете использовать простой метод .split ("REGEXP"), доступный в java.lang.String. Например:
источник
источник
если вы читаете из файла, то это может помочь вам
источник