我正在Pega中从事实体提取工作。我需要匹配一个包含3个部分的保单号:
1)可以选择将1作为策略中的第一个字符。它是可选的
2)长度为2的字母数字,后跟可选的连字符或空格
3)长度为3的字母数字
所以格式的一些示例是:
AB-CDE,AB CDE,ABCDE,1AB-CDE
23-456、23 456、23456、123456
AB-2B4,AB-B2C,A1-2B4、2A-34B,12A-34B,123-45C等
每当保单号以2或3位数字开头或没有空格或连字符时,我就会遇到问题。
例如12A-34B,123-45C,23456、123456。
我写了以下脚本:
PACKAGE uima.ruta.example;
Document{-> RETAINTYPE(SPACE)};
("1")+? ((NUM* W*)|(W* NUM*)){REGEXP(".{2}")} ("-"|SPACE)? ((NUM* W* NUM*)|(W* NUM* W*)){REGEXP(".{3}")->MARK(EntityType,1,4)};
((NUM* W*)|(W* NUM*)){REGEXP(".{2}")} ("-"|SPACE)? ((NUM* W* NUM*)|(W* NUM* W*)){REGEXP(".{3}")->MARK(EntityType,1,3)};
此代码对于具有空格/连字符的模式很好用: AB-CDE,AB CDE,1AB-CDE。但是如果没有空格并且连字符或模式以2或3位数字开头,则无法正常工作。
请帮助编写正确的图案。 预先感谢。
答案 0 :(得分:0)
UIMA Ruta种子批注NUM,覆盖整个数字。因此,Ruta无法在子注释中拆分诸如23456
,123456
之类的示例。
一种解决方案是使用纯正则表达式注释所有上述示例:
"\\w{2,3}[\\-|\\s]?\\w{2,3}" -> EntityType;