Я спросил в другой теме о сопоставлении чисел, таких как 123. Это было слишком узким, и, когда я углубляюсь в Regex, я вижу, что вам действительно нужно что-то определить. Поэтому я попросил экспоненциальную нотацию и получил ответ в this post: /^keyword\s+(-?(?:\d+|\d*\.\d*)(?:[Ee]-?(?:\d+|\d*\.\d*))?)/
. Я пытался понять это, но до сих пор не смог.Соответствие всем номерам
Так что я прошу более конкретно. Мне нужно сопоставить цифры, здесь приводятся некоторые примеры:
13
-999
83.12300
.151
-.213
1e14
124e2
-9e-4
У вас есть это, обычная математическая штука.
И чтобы быть более конкретным, я даю вам свой код Perl для этого. Я ищу keyword
на линии и вам нужно получить значение из этой строки. Я хотел бы получить это значение в одном Regex, потому что мой обходной путь с оператором or-||
вызывает проблемы.
my $value;
open(FILE,"data.dat") or die "error on opening data: $!\n";
while (my $line = <FILE>) {
if (($line =~ /^keyword\s+(-?(?:\d+|\d*\.\d*)(?:[Ee]-?(?:\d+|\d*\.\d*))?)/x) || ($line =~ /^keyword\s*(\d*\.\d*)/)) {
$value = $1;
};
}
close(FILE);
Редактировать
Thx всем за подсказки до сих пор.
Это не выдержит число из середины строки, что, как представляется, требуется. – Borodin
@borodin, см. Править. Я предполагаю, что моя точка зрения заключается в том, что нам не нужно делать регулярное выражение для соответствия числу, поскольку эта функциональность уже существует в ядре. – chilemagic
Но теперь вы полагаетесь на число, являющееся * целым * остальной строки после слова «ключевое слово». Предположим, вы хотите найти числа в 'keyword 3.14 + .67 + 7e4'. Все 'look_like_number' будут делать это, задавая строку, сообщать вам, является ли * целая вещь * похожей на число. – Borodin