Я строю небольшую библиотеку Java, которая должна соответствовать единицам в строках. Например, если у меня есть «300000000 м/с^2», я хочу, чтобы он соответствовал «m» и «s^2».Как создать регулярное выражение для единиц измерения?
До сих пор, я попытался наиболее мыслимые (мной) конфигурации напоминающая (я надеюсь, что это хорошее начало)
"[[a-zA-Z]+[\\^[\\-]?[0-9]+]?]+"
Чтобы уточнить, мне нужно что-то, что будет соответствовать letters[^[-]numbers]
(где [] означает не обязательно части). Это означает: буквы, возможно, сопровождаемые экспонентом, который может быть отрицательным.
Я немного изучил регулярное выражение, но я действительно не бегло, поэтому любая помощь будет принята с благодарностью!
Большое спасибо,
EDIT: Я только попробовал первые 3 ответов
String regex1 = "([a-zA-Z]+)(?:\\^(-?\\d+))?";
String regex2 = "[a-zA-Z]+(\\^-?[0-9]+)?";
String regex3 = "[a-zA-Z]+(?:\\^-?[0-9]+)?";
и это не работает ... Я знаю, что код, который проверяет образцы работайте, потому что, если я попробую что-то простое, например, сопоставление «[0-9] +» в «12345», оно будет соответствовать всей строке. Итак, я не понимаю, что еще не так. Я пытаюсь с изменением моих скобок скобки, где это необходимо в данный момент ...
КОДА используется для тестирования:
public static void main(String[] args) {
String input = "30000 m/s^2";
// String input = "35345";
String regex1 = "([a-zA-Z]+)(?:\\^(-?\\d+))?";
String regex2 = "[a-zA-Z]+(\\^-?[0-9]+)?";
String regex3 = "[a-zA-Z]+(?:\\^-?[0-9]+)?";
String regex10 = "[0-9]+";
String regex = "([a-zA-Z]+)(?:\\^\\-?[0-9]+)?";
Pattern pattern = Pattern.compile(regex3);
Matcher matcher = pattern.matcher(input);
if (matcher.matches()) {
System.out.println("MATCHES");
do {
int start = matcher.start();
int end = matcher.end();
// System.out.println(start + " " + end);
System.out.println(input.substring(start, end));
} while (matcher.find());
}
}
Вы можете разместить код, который вы используете для поиска совпадений? –
Несомненно, всего за секунду ... – Joanis
Проблема в том, что вы не включаете/как допустимый символ. Вы могли бы вместо этого записать его как ms^-2, и в целом вы можете иметь несколько единиц, а не только два. –