0

在我的位置字段中,我有:

"Location:
SOME PLACE

Additional Details:
DEFECT
"

不知何故,我需要这个来取出"SOME PLACE". 我试图了解该regexp_substr()函数是如何工作的,但它与我的 C# 背景非常不同,而且我不断得到奇怪的结果,比如空值。

通常我会期望做类似的事情:

regexp_substr(LocationField, 'Location:(.*)\n') as "NewLocation"

并且要删掉括号中的部分……但我错了。有任何想法吗?

解决方案 :

regexp_replace(FIELD, 'Location:'||CHR(13)||CHR(10)||'(.*).*$'||CHR(13)||CHR(10)||CHR(13)||CHR(10)||'Additional Details:.*$', '\1', 1, 1, 'n' ) as "Location"
4

3 回答 3

1

你可以这样做:

regexp_replace(LocationField, 
               'location:'||chr(10)||'([^'||chr(10)||']*).*$', '\1', 
                1, 1, 'n' ) 

即正则表达式字符串

location:\n([^\n]*).*$

但由于 oracle 无法与我们一起使用,我们在其位置进行\n拼接。chr(10)

n模式意味着.将匹配换行符(因此.*$在某些文本之后的换行符之后删除所有内容。

如果位置可以有多行文本,后跟添加详细信息,您可以使用:

regexp_replace(LocationField, 
               'location:'||chr(10)||'(.*)'||chr(10)||'Additional.*$',  
               '\1', 1, 1, 'n' ) as "NewLocation"
于 2013-02-11T16:55:36.590 回答
0

您需要在多行模式下运行正则表达式,这意味着填充 REGEXP_SUBSTR() 调用的完整签名:

select regexp_substr( locationField, '^([A-Z ]+)$', 1, 1, 'm')
from your_table
/

'm'是一个指定多行模式的匹配参数。这意味着^$在匹配模式中被视为newline边界而不是字符串的开始和结束。 了解更多

于 2013-02-11T15:05:04.837 回答
0

请改用REGEXP_REPLACE

select REGEXP_REPLACE( target, LocationField, 'Location:(.*)\n', '' ) as "NewLocation"
from your_table;

应该让你朝着正确的方向前进。

于 2013-02-11T14:31:12.530 回答