У меня есть огромный файл, который может иметь строки в следующих двух форматах:
формат 1:
*1 <int_1/string_1>:<int/string> <int_2/string_2>:<int/string> <float>
ФОРМАТ2:
*1 <int/string>:<int/string> <float>
Итак, возможные варианты для вышеуказанного формата:
*1 1:2 3:4 2.3
*1 1:foo 3:bar 2.3
*1 foo:1 bar:4 2.3
*1 foo:foo bar:bar 2.3
*1 foo:foo 2.3
Из обеих приведенных выше строк формата мне нужно учитывать только «Формат1» для моего кода. Читая этот огромный файл, пропустите строки, соответствующие «Format2». В возможных случаях я рассмотрю первые 4 случая, а не последний, так как он соответствует «Format2». Итак, регулярное выражение должно быть примерно таким:
(\d+)(\s+)(\\*\S+:\S+)(\s+)(\\*\S+:\S+)(\s+)(\d+)
, где
\d is any digit. \d+ is more than 1 digit.
\s is space. \s+ is more than 1 space.
\S is anything non-space. \S+ is anything more than 1 non-space.
После рассмотрения строки 'Format1' мне нужно взять из нее два значения:
int_1/string_1
int_2/string_2
Что вы могли бы сделать оптимально, чтобы справиться с этим?