gpt4 book ai didi

regex - Perl 正则表达式

转载 作者:行者123 更新时间:2023-12-05 01:24:13 25 4
gpt4 key购买 nike

我继承了一个从某些文件中提取数据的 perl 脚本。整个脚本运行良好,但最近一些工程师在某个位置输入了多个数字,而这些数字通常只有一个数字,因此输出并未显示所有预期内容。

样本输入:
CRXXXX: "Then some text"CRs XXXX, XXXX, XX, XXXCRXXX "Some Text"
目前,这个正则表达式语句在 CR 之后提取了数字,但是如果给出示例输入的第二行,它会打印 "s XXXX, XXXX, XX, XXX"而不是想要的 "XXXX XXXX XX XXX"
我对 perl 很陌生,正在努力弄清楚如何改变这个正则表达式以处理所有输入。

 $temp_comment =~ s/\s[cC][rR][-\s:;]*([\d])/\n$1/mg;

提前致谢!

布洛克

最佳答案

对于示例数据,例如:

my $temp_comment =
'CR1234: "Then some text"
CRs 2345, 3456, 45, 567
CR678 "Some Text"';

尝试:
$temp_comment =~ s/(,)|[^\d\n]+/$1?' ':''/semg;

或者,如果您想接近字符串模板:
$temp_comment =~ s/ ^                 # multi-line mode, line start
\s* # leading blanks?
CR # CR tag
\D* # non-number stuff
( # start capture group
(?:\d+ [,\s]*)+ # find (number, comma, space) groups
) # end capture group
\D* # skip remaining non-number stuff
$ # multi-line mode, line end
/$1/mxg; # set multi-line mode + regex comments "x"

但是您必须在后续步骤中删除数字组中的逗号。
$temp_comment =~ tr/,//d;             # remove commas in the whole string

或者
$temp_comment =~ s/(?<=\d),(?=\s\d)//g;  # remove commas between numbers '11, 22'

对于“单步”,您必须使用 /e 修饰符:
$temp_comment =~ s{ ^                 # line start
\s* # leading blanks?
CR # CR tag
\D* # non-number stuff
((?:\d+ [,\s]*)+) # single or group of numbers
\D* # non number stuff
$ # line end
}
{do{(local$_=$1)=~y/,//d;$_}}mxeg;

根据上述数据,这将导致:
1234
2345 3456 45 567
678

但实际上, 请使用 ,如果可能的话, 更简单的两步方法 。后一个正则表达式可能是您的继任者的维护噩梦。

关于regex - Perl 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11618775/

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