Помогите Regexp

  • Автор темы Автор темы CoolBoy
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

CoolBoy

Активный участник
Пользователь
Баллы
96
Имя в Minecraft
Xezard
Доброго времени суток.

Имею строку следующего содержания:
YAML:
&6Использований&7: &6100

Нужно достать с помощью regexp из этой строки последнее число - 100.
Но! На месте слова 'Использований' может быть любое другое слово.
Сплит также предлагать бесполезно, на месте двоиточия также может быть что угодно. Сама строка может и не содержать пробе(ла / ов). А, да, нельзя никак взаимодействовать со строкой, тоесть заменять слово, убирать колор коды и так далее.

@[Кто там в регексы умеет(]
 
Последнее редактирование:
Доброго времени суток.

Имею строку следующего содержания:
YAML:
&6Использований&7: &6100

Нужно достать с помощью regexp из этой строки последнее число - 100.
Но! На месте слова 'Использований' может быть любое другое слово.
Сплит также предлагать бесполезно, на месте двоиточия также может быть что угодно. Сама строка может и не содержать пробе(ла / ов). А, да, нельзя никак взаимодействовать со строкой, тоесть заменять слово, убирать колор коды и так далее.

@[Кто там в регексы умеет(]
вообще в душе не ипу что такое регексы и всегда работаю с чарами в таких случаях
Java:
String str = "dasdasd: &6100";
String results = "";
for (int c =str.length()-1; c>=0; c--) {
    if (str.charAt(c)>='0'&&str.charAt(c)<='9'&&str.charAt(c-1)!='&'&&str.charAt(c-1)!='§') results+=str.charAt(c);
}
int result = Integer.parseInt(new StringBuffer(results).reverse().toString());[/java]
 
вообще в душе не ипу что такое регексы и всегда работаю с чарами в таких случаях
Java:
String str = "dasdasd: &6100";
String results = "";
for (int c =str.length()-1; c>=0; c--) {
    if (str.charAt(c)>='0'&&str.charAt(c)<='9'&&str.charAt(c-1)!='&'&&str.charAt(c-1)!='§') results+=str.charAt(c);
}
int result = Integer.parseInt(new StringBuffer(results).reverse().toString());[/java]
Хм, интересно. Позже проверю. Регексом всё равно проще.
 
ChatColor.stripColor(string)
\d+(?!\d+)
 
Так не убирай.
temp_string=string
ChatColor.stripColor(temp_string)

Или до этого тяжело додуматься? :lol::lol::lol::lol:
 
ChatColor.stripColor(temp_string)
Не стоит забывать преобразовать & в знаки параграфа, получится что-то вроде
ChatColor.stripColor(ChatColor.translateAlternateColorCodes('&', text))

Ещё один вариант получения числа: (\d+)$
 
Так не убирай.
temp_string=string
ChatColor.stripColor(temp_string)

Или до этого тяжело додуматься? :lol::lol::lol::lol:
Мне потом значение в этой строке заменить нужно. И вернуть строку.
Не нужно костылей предлагать.
Не стоит забывать преобразовать & в знаки параграфа, получится что-то вроде
ChatColor.stripColor(ChatColor.translateAlternateColorCodes('&', text))

Ещё один вариант получения числа: (\d+)$
Твой регекс захватит число, которое обозначает колор код.
Screenshot_2017-01-28-15-19-18.png
 
Твой регекс захватит число, которое обозначает колор код.
Да, я знаю. Но перед этим я написал, что предварительно нужно очистить строку от кодов форматирования.

Если не очищать, тогда может выйдет так: (&[0-9a-fklmnor])(\d+)$
Не помню, как там в Java обрабатываются группы в регулярных выражениях, но по идее код цвета будет в группе 1, число будет в группе 2..
 
Да, я знаю. Но перед этим я написал, что предварительно нужно очистить строку от кодов форматирования.

Тогда так: (&[0-9a-fklmnor])(\d+)$
Не помню, как там в Java обрабатываются группы в регулярных выражениях, но по идее код цвета будет в группе 1, число будет в группе 2..
Я написал сразу в заголовке темы - КОЛОР КОДЫ УБИРАТЬ НЕЛЬЗЯ. ВТОРУЮ СТРОКУ СОЗДАВАТЬ НЕЛЬЗЯ.
Работаю только с этой строкой. Нужен только регекс. Костыль мне скинули первым же ответом, если с регексом не выйдет - воспользуюсь им.

Верно. Твой регекс берёт колор код (теперь целиком) и число. Мне нужно получить только число.
 
Пробел самый простой вариант тут. Ну а код цвета отсеешь регуляркой, или добавь после него еще пробел.
 
Пробел самый простой вариант тут. Ну а код цвета отсеешь регуляркой, или добавь после него еще пробел.
Строка может не содержать пробела. Нужен универсальный вариант. Ты же шаришь в регулярках? :)
 
Так получите вторую группу из возвращаемого значения (не знаю, как написать это другими словами) - она и будет содержать только число.
Каким образом я могу это сделать в жабке?
Я планировал совсем просто:
string.replaceAll("регекс, который получает число", "то, на что мне нужно это число заменить");
 
Ок, тогда идем сложным путем. Первой регуляркой отрезаешь колор, второй Не цифры.
 
Вот один из вариантов.

String s = "&6Использований&7: &6100";
s.replace(s.replaceAll("(?i)&[0-9A-FK-OR]", "").replaceAll("[^0-9]", ""),
"500");
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх