Получение подстроки с помощью регулярного выражения

#java #regex

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

Вопрос:

У меня есть несколько строк, таких как

 1.IND_FROM_ONE_TO_FIVE  
2.IND_FROM_FIVE_TO_TEN  
3.BS_FROM_ONE_TO_FIVE 
4.BS_FROM_FIVE_TO_TEN   
5.OP_FROM_ONE_TO_FIVE  
6.OP_FROM_FIVE_TO_TEN
  

И я хочу вырезать из них все до первого «включить» !!!.

Что-то вроде :

 1.IND_FROM_ONE_TO_FIVE => FROM_ONE_TO_FIVE

2.IND_FROM_FIVE_TO_TEN => FROM_FIVE_TO_TEN

3.BS_FROM_ONE_TO_FIVE => FROM_ONE_TO_FIVE

4.BS_FROM_FIVE_TO_TEN => FROM_FIVE_TO_TEN etc.
  

Я пробовал /[^_]*/ , но он возвращает IND_FROM_ONE_TO_FIVE => _FROM_ONE_TO_FIVE (не вырезал сначала «_»)

Как я мог бы сделать это на Java?

Ответ №1:

Вы также можете добавить привязку и сопоставить подчеркивание после is . При замене используйте пустую строку.

 ^[^_]*_
  

Демонстрация регулярных выражений | Демонстрация Java

Используя replaceFirst, вы можете опустить привязку:

 System.out.println("IND_FROM_ONE_TO_FIVE".replaceFirst("[^_]*_", ""));
  

Вывод

 FROM_ONE_TO_FIVE
  

Ответ №2:

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

 ^[^_] _(.*)
  

Я также пытался протестировать результат на Java.

 import java.util.regex.*;
public class MyClass {
    public static void main(String args[]) {
        String mydata = "BS_FROM_FIVE_TO_TEN";
        Pattern pattern = Pattern.compile("^[^_] _(.*)");
        Matcher matcher = pattern.matcher(mydata);
        if (matcher.find())
        {
            System.out.println(matcher.group(1));
        }
    }
}
  

Результат

 FROM_FIVE_TO_TEN
  

Ответ №3:

Вы можете использовать сопоставление, а не замену: возьмите первый и единственный захват из этого регулярного выражения (многострочный): ^d .[^_] _(.*)$ (https://regex101.com/r/Y3Ztv4/1 ).