用于查找不以字符结尾或开头的术语的以逗号分隔的术语列表的正则表达式
RegExp for a comma-separated list of terms that finds terms not ending or starting with a character
我有一个包含以逗号分隔的术语列表的字符串,如下所示:
term1, term2* ,term3*,term 4 , *term5, *term 6 , term 7*,* term 8
每个术语可能有前导或尾随空格。这些应该被忽略。每个术语内部可能有空格。
我想找到所有不以星号开头或结尾的术语。在上面的列表中,这将是 "term1" 和 "term 4".
我失败的尝试只是让我找到了每个术语(只是去掉星号而不是忽略该术语),就像这个例子中的那样:https://regex101.com/r/9QjjJ5/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,'^\*|\*$');
我有一个包含以逗号分隔的术语列表的字符串,如下所示:
term1, term2* ,term3*,term 4 , *term5, *term 6 , term 7*,* term 8
每个术语可能有前导或尾随空格。这些应该被忽略。每个术语内部可能有空格。 我想找到所有不以星号开头或结尾的术语。在上面的列表中,这将是 "term1" 和 "term 4".
我失败的尝试只是让我找到了每个术语(只是去掉星号而不是忽略该术语),就像这个例子中的那样:https://regex101.com/r/9QjjJ5/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,'^\*|\*$');