0

我有一个包含逗号分隔的术语列表的字符串,如下所示:

term1, term2* ,term3*,term 4 , *term5, *term 6 , term 7*,* term 8

每个术语可能有前导或尾随空格。这些应该被忽略。每个术语里面可能有空格。我想找到所有不以星号开头或结尾的术语。在上面的列表中,这将是“term1”和“term 4”。

我失败的尝试只会导致我找到每个术语(只是删除星号而不是忽略该术语),就像在这个例子中一样:https ://regex101.com/r/9QjjJ5/1 。

我也尝试使用前瞻表达式和边框来实现这一点,但必须错误地使用它们,因为找到的术语随后会被缩短或排除术语内的空格。

4

1 回答 1

1

您可以使用Oracle中的常规方法将字符串拆分然后用于REGEXP_LIKE过滤。

WITH tab ( terms ) AS (
    SELECT
        'term1, term2* ,term3*,term 4 , *term5, *term 6 , term 7*,* term 8'
    FROM
        dual
) SELECT * FROM
(
SELECT DISTINCT
    TRIM(regexp_substr(terms,'[^,]+',1,level) ) term 
  FROM
    tab
CONNECT BY
    regexp_substr(terms,'[^,]+',1,level) IS NOT NULL
    ) WHERE NOT REGEXP_LIKE (term,'^\*|\*$');
于 2017-11-27T12:13:58.790 回答