使用perl查找并将数字放入变量中

时间:2014-01-22 07:07:48

标签: regex perl

我在文件中有几个句子

Text1{489.15,274.3},text2{183.24,1.2},text3{192,1001}

如何将text2(183.24和1.2)的值收集到变量?

2 个答案:

答案 0 :(得分:1)

你在这里有各种各样的方式。例如,您可以使用简单的正则表达式:

use strict;
use warnings;
use feature 'say';
my $text = q|Text1{489.15,274.3},text2{183.24,1.2},text3{192,1001}|;
my ($num1, $num2);

if ($text =~ m/text2\{(\d+\.\d+),(\d+\.\d+)\}/) {
  $num1 = $1;
  $num2 = $2;
}
say $num1;
say $num2;

或者您可以使用split之类的mpapec作为评论。

编辑:

使用这个解决方案,这些数字看起来很重要。例如,如果这些数字不是浮点数,则它不起作用。但是你只给了我们一个例子,所以很难说。 顺便说一句:请用你试过的代码发布你的问题...

答案 1 :(得分:1)

第一个很容易。

(?<=text2\{)[\-.\d]*

首先查找“text2 {”,然后捕获一个跟随该数字的数字。像这样的lookbehind需要一个固定长度的搜索字符串。 数字可以是负数,但假设没有杂散空间,没有空白点,并且数字非常规则(例如,两个小数点之间不是两个小数点或逗号)。 试一试here

对于第二部分,您可以在组中捕获它,并排除所需部分之前和之后的部分。 例如,搜索

(.*?text2{[\-.\d]*,)([\-.\d]*)(.*)

并替换为$ 2。 这将搜索所有字符,直到“text2 {”,后跟一个数字后跟一个逗号 - 这都是组1。 然后它搜索一个数字(像之前一样) - 组2.然后它接收所有内容 - 组3。 当你用$ 2替换整个东西时,第1组和第2组将被丢弃。 试试here

相关问题