#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 ).