gpt4 book ai didi

regex - perl:正则表达式,如何在找到的正则表达式左侧获取数据

转载 作者:行者123 更新时间:2023-12-02 00:00:57 25 4
gpt4 key购买 nike

我一直在为某些模式使用正则表达式。我理解这样的事情:

$_ =~/^\w{12,12}z$/ # 找到一个长度为 12 且以 z 结尾的单词。

$_ =~/^[^aeiou]{8,8}$/i) # 找到一个长度为 8 且没有元音字母且不区分大小写的单词。

但我现在遇到了一些不同的问题。让我们做一些简单的事情:

$_ =~ s/angstroms?/nm/gi;

它将读取该行并将 'angstrom(s) 转换为 nm。一个测量。那部分是正确的,但我在理解如何获取它之前的数字时遇到了问题。 IE。 22埃。我希望它获取 22 并将其放入变量 ($1)。

我不是在寻找 100% 的答案,更多的是有人向我解释,以便我真正掌握这个概念。我的想法是,我将使用该变量并将其转换为纳米(0.1*埃值)。

最佳答案

例子:

$a = "512 angstrom";
$a =~ s/(\d+)\s*angstroms?/\1 nm/gi;
print "matched digits:\t", $1, "\n";
print "value of \$a:\t", $a, "\n";

第二行匹配数字列表加上额外的空格并将其替换为右侧(注意反向引用 \1)。由于数字列表是在一个组中捕获的,因此该变量在匹配后将显示为 $1。因此,输出是:

matched digits: 512
value of $a: 512 nm

瞧!数字被捕获在变量 $1 中。此外,您可以在替换模式中执行计算:

$a =~ s{(\d+)\s*angstroms?}{@{[$1 * 0.1 ]} nm}gis;

或者,按照评论中的建议更易于阅读,

$a =~ s/(\d+)\s*angstroms?/$1 * 0.1 ." nm"/gie;

将给出输出

value of $a:    51.2 nm

这可能是您真正想要的。

关于regex - perl:正则表达式,如何在找到的正则表达式左侧获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21433851/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com