我在文件中有几个句子
Text1{489.15,274.3},text2{183.24,1.2},text3{192,1001}
如何将text2(183.24和1.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