我使用正则表达式在单词出现后找到文本。
问题是某些地址对大房子使用不同的缩写:有些空间有点有点
我希望在出现任何文字之后的所有文字。无视案例。
我尝试了这个,但不确定如何包含多个开始
SELECT
REGEXP_SUBSTR ("Address", '[^QUINTA]+') "REGEXPR_SUBSTR"
FROM Address;
答案 0 :(得分:3)
我相信这会与您想要的缩写相匹配:
SELECT
REGEXP_REPLACE("Address", '^.*Q(UIN)?TA\.? *|^.*', '', 1, 1, 'i')
"REGEXPR_SUBSTR"
FROM Address;
它试图匹配字符串的所有内容:
Q
+ UIN
(可选) + TA
+ {{ 1}}(可选) + 任意数量的空格。.
匹配。REGEXP_REPLACE
,它会将匹配替换为空字符串,从而删除所有字符,直到“^.*
”,其任何替换或整个字符串。注意传递给REGEXP_REPLACE
的最后一个参数:QTA
。这是一个设置案例的标志 - i nsensitive match(flags described here)。
您有兴趣制作可选项的部分使用'i'
,该( pattern )
是具有?
量词(which makes it optional)的组。因此,Q(UIN)?TA
匹配“QUINTA
”或“QTA
”。
或者,在您的问题范围内,如果您需要不同的选项,则需要将alternation与|
一起使用。例如,(pattern1|pattern2|etc)
匹配3个选项中的任何一个。此外,正则表达式(QUINTA|QTA)
与<{1>}完全相同
您尝试的构造(Q(UIN)?TA
)使用character class,它匹配除 [^QUINTA]+
,Q
,{{之外的任何字符1}},U
,I
或N
,重复1次或更多次。但它适用于字符,而不是字。例如,T
完全匹配字符串“A
”,但无法匹配“[^QUINTA]+
”。