如何使用RUTA脚本的BEFORE和AFTER条件提取关键词间文本?
RUTA脚本提取关键词间文本的正确写法
你的代码只限定了目标词需要在「Full Name」之后,但没限定它要在「Middle Name」之前,所以会匹配「Full Name」之后的所有词,自然达不到提取中间「XYZ123」的效果。
要精准提取两个关键词短语之间的文本,需要同时用AFTER和BEFORE条件,把前后的连续关键词组合作为范围边界,示例代码如下:
// 直接在条件中指定前后的关键词序列 W{AFTER(W{REGEXP("(?i)full")} W{REGEXP("(?i)name")}) AND BEFORE(W{REGEXP("(?i)middle")} W{REGEXP("(?i)name")})} -> MARK(TargetText);
如果需要更高的可读性,可以先把前后的关键词短语标记为实体,再用实体做范围判断:
// 标记前后的关键词短语 SEQUENCE(W{REGEXP("(?i)full")}, W{REGEXP("(?i)name")}) -> FullName; SEQUENCE(W{REGEXP("(?i)middle")}, W{REGEXP("(?i)name")}) -> MiddleName; // 提取两个实体之间的词 W{AFTER(FullName) AND BEFORE(MiddleName)} -> MARK(TargetText);
两种写法都能精准匹配「Full Name」和「Middle Name」之间的「XYZ123」。需要注意的是,REGEXP里的(?i)是忽略大小写的匹配规则,如果不需要可以去掉。
内容的提问来源于stack exchange,提问作者Akku
相关产品推荐
相关产品推荐

