我正在挖掘诸如在家分娩、在家分娩等术语的文本字段。我下面的代码主要是工作的。然而,我如何限制字符的数量来限制我可能得到的假阳性的数量?
我想要的是第1行和第2行,但不是第3行。我希望将regexp_like语句中的字符数限制在10或20个,这样我就可以在家传递或传递。
with test (id, col) as
(select 1, 'abc 3/4/16 blah blah home delivery' from dual union all
select 2, 'abc 3/4/16 blah blah 3/7/16 delivery at home xxx cc2' from dual union all
select 3, 'xxx 3/5/18 delivery 234 imp happened on 5/8/19 sent home 23f' from dual union all
select 4, '3/10/18 bla bla imp-3/9/17 xfe 334 3/4/13 x' from dual
)
select * from test
where regexp_like(col,'(home|deliver).*(deliv|birth|home)') ;谢谢-
发布于 2019-09-19 22:55:32
如果你对得到的比赛和表现感到满意,
您可以限制home|deliver组和deliv|birth|home组之间的插入字符的长度,方法是用长度限制的任意字符匹配器替换无界.*。
可以指定字符串中中间字符的允许最大长度和最小长度.
下面是一个示例,允许组之间的字符数为0- 30。
WITH TEST (ID , COL) AS
(SELECT 1, 'abc 3/4/16 blah blah home delivery' FROM DUAL UNION ALL
SELECT 2, 'abc 3/4/16 blah blah 3/7/16 delivery at home xxx cc2' FROM DUAL UNION ALL
SELECT 3, 'xxx 3/5/18 delivery 234 imp happened on 5/8/19 sent home 23f' FROM DUAL UNION ALL
SELECT 4, '3/10/18 bla bla imp-3/9/17 xfe 334 3/4/13 x' FROM DUAL)
SELECT *
FROM TEST
WHERE REGEXP_LIKE(COL , '(home|deliver).{0,30}(deliv|birth|home)');结果:
ID COL
_____ _______________________________________________________
1 abc 3/4/16 blah blah home delivery
2 abc 3/4/16 blah blah 3/7/16 delivery at home xxx cc2
2 rows selected.https://stackoverflow.com/questions/58016060
复制相似问题