Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我有表格的文本行
F xxx.xxx
其中 F 可以后跟任意数量的空格,后跟任意数量的数字,可选地后跟十进制和十进制数字。我想找到这些数字,将它们除以一个变量,然后替换它们。
我的代码大部分都有效,但我无法逃避实际计算数字的除法。
my $devisor = 60.0; s/F\s*?(\d+(\.\d+)?)/"NEWF$1\/$divisor"/;
我怎样才能像这样搜索、计算和内联替换?
如果您使用 '/e' 修饰符, 的替换部分s///将被视为 Perl 表达式并进行计算。此外,您可能需要另一个分隔符,这样您就可以很好地编写除法而无需转义。您的括号将仅捕获小数部分,而不是整数。最后,devisor是一个拼写错误。
s///
devisor
因此,您可以编写s#F\s*(\d+(\/\d+)?)#$1/$divisor#e(假设您实际定义了$divisor)。
s#F\s*(\d+(\/\d+)?)#$1/$divisor#e
$divisor