РЕГУЛЯРНОЕ ВЫРАЖЕНИЕ для замены чисел строкой

#java #regex #salesforce

#java #регулярное выражение #salesforce

Вопрос:

У меня есть строка, как показано ниже:

((((1 ИЛИ 2) И 3) ИЛИ 11) И 23)

Я хочу заменить числа строковыми значениями.

Я новичок в регулярных выражениях и не могу понять, как заменить числа, лежащие в пределах диапазона.

Комментарии:

1. Вы хотите заменить числа строковым значением numbers?

2. нет, у меня есть другие строковые значения, которые будут заполнены

Ответ №1:

Вот мой код для решения вашей проблемы. Моего плохого знания регулярных выражений было недостаточно для решения только с помощью регулярных выражений.

 public static void main(String[] args)
{
    String temp = "(X) |";
    String regex = "";
    String text = "((((1 OR 2) AND 3) OR 11) AND 23)";
    Map<String, String> numberToString = new TreeMap<>((o1, o2) -> Integer.valueOf(o2) - Integer.valueOf(o1));

    numberToString.put("3", "THREE");
    numberToString.put("2", "TWO");
    numberToString.put("1", "ONE");
    numberToString.put("11", "ELEVEN");
    numberToString.put("23", "TWENTYTHREE");

    for(String number : numberToString.keySet()){
        regex = regex   temp.replace("X", number);
    }
    regex = regex.substring(0, regex.lastIndexOf('|'));
    Set<String> allMatches = new TreeSet<>((o1, o2) -> Integer.valueOf(o2) - Integer.valueOf(o1));
    Matcher m = Pattern.compile(regex).matcher(text);
    while (m.find()) {
        allMatches.add(m.group());
    }
    for (String match : allMatches) {
        if (numberToString.get(match) != null)
            text = text.replaceAll(match, numberToString.get(match));
    }

    System.out.println(text);
    System.out.println(regex);
}
  

Ответ №2:

Используйте str.replaceAll(1, «один»); функция

Комментарии:

1. Это не сработает, потому что 11 также будет заменено на единицу. Мы хотим заменить только точный символ, указанный в ключе. Например, 1 следует заменять только на единицу, а не на 111, 11, 11111 и т.д.