You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Perl匹配前方至少含三个单词的点号的实现问题咨询

解决方案

你原有正则未达预期是因为单词与空格的匹配逻辑存在疏漏,这里提供两种更简洁且能达到预期效果的实现方式:

方案1:优化split用的正则表达式

调整后顾断言里的单词匹配逻辑,适配你对单词(允许包含字母、逗号、撇号)的定义:

use v5.35.2;
use warnings;
use strict;

my $str = shift // q{If you have to go. you go. That's no problem.};

# 后顾断言匹配前方至少3个单词的场景
my $regex = qr/(?<=(?:[\w',]+\s){2}(?:[\w',]+)\s?)\./;

my @all_parts = split $regex, $str, 2; # 加第三个参数2表示最多拆分2段,避免后续符合要求的点也被拆分

say for @all_parts;

注意这里给split加了第三个参数2,限制最多拆分出2段,和你预期的输出结果匹配,避免后续符合规则的点号也被拆分。

方案2:直接捕获匹配(更推荐)

无需依赖可变长度后顾断言,逻辑更直观,不容易踩坑:

use v5.35.2;
use warnings;
use strict;

my $str = shift // q{If you have to go. you go. That's no problem.};

if ($str =~ /^((?:\s*[\w',]+){3,}?[^.]*)\.(.*)/) {
    say $1;
    say $2;
}

两种方案运行后都可以得到你预期的输出:

If you have to go
 you go. That's no problem

内容的提问来源于stack exchange,提问作者jonah_w

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 22:18:03