gpt4 book ai didi

regex - 如何在字符串中捕获罗马数字?

转载 作者:行者123 更新时间:2023-12-04 15:01:36 28 4
gpt4 key购买 nike

我想在字符串中捕获罗马数字(低于 80 的数字就足够了)。我在 How do you match only valid roman numerals with a regular expression? 中找到了很好的基础.问题是:它处理整个字符串。我还没有找到如何检测字符串中的罗马数字的解决方案,因为没有任何强制性,每个组都可能是可选的。到目前为止,我尝试过这样的事情:

my $x = ' some text I-LXIII iv more ';

if ( $x =~ s/\b(
(
(XC|XL|L?X{0,3}) # first group 10-90
|
(IX|IV|V?I{0,3}) # second group 1-9
)+
)
\b/>$1</xgi ) { # mark every occurrence
say $x;
}

__END__
><some>< ><text>< ><>I<><-><>LXIII<>< ><>iv<>< ><more><
desired output:
some text >I<->LXIII< >iv< more

所以,这个也可以自己捕获单词边界,因为所有组都是可选的。如何完成?如何使这两组中的一组成为强制性的,而无法分辨哪一组是强制性的?也欢迎其他捕捉罗马人的方法。

最佳答案

您可以使用Roman CPAN 模块

use Roman;

my $x = ' some text I-LXIII VII XCVI IIIXII iv more ';
if ( $x =~
s/\b
(
[IVXLC]+
)
\b
/isroman($1) ? ">$1<" : $1/exgi ) {
say $x;
}

输出:
some text >I<->LXIII< >VII< >XCVI< IIIXII >iv< more 

关于regex - 如何在字符串中捕获罗马数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12949997/

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