Рассмотрим набор строк, подобных следующему:
Memory size = 4,194,304 KB
Cache size= 32,768 K
Number of cores = 8
Note =4,000,000 KB is less than 4 GB
Существует ли общее и не слишком сложное регулярное выражение Java, которое полностью соответствует каждой строке и создает следующие группы?
"Memory size", "4,194,304", "KB"
"Cache size", "32,768", "K"
"Number of cores", "8"
"Note", "4,000,000 KB is less than 4 GB"
Это группы key
, value
и (необязательно) suffix
.
Дополнительные требования:
- Значение (то есть часть после '=') не обязательно является числом
- Любые пробелы по обе стороны от «:» должны быть удалены за один проход без возврата.
- Сопоставление строк «KB» и «K» не чувствительно к регистру.
- Захваченные группы всегда должны иметь один и тот же индекс (в идеале 3 группы для ключа/значения/суффикса с одинаковым индексом группы для всех совпадений).
Ясно, что простое выражение типа
([^=]+) *: *([^=]+)
не полностью покрывает приведенную выше спецификацию.