在我的位置字段中,我有:
"Location:
SOME PLACE
Additional Details:
DEFECT
"
不知怎的,我需要这个来取出"SOME PLACE"
。我试图理解regexp_substr()
函数是如何工作的,但它与我的C#背景非常不同,我不断得到奇怪的结果,如null。
通常我会期望做类似的事情:
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"
答案 0 :(得分: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"
答案 1 :(得分:0)
改为使用REGEXP_REPLACE:
select REGEXP_REPLACE( target, LocationField, 'Location:(.*)\n', '' ) as "NewLocation"
from your_table;
应该让你朝着正确的方向前进。
答案 2 :(得分:0)
您需要以多行模式运行正则表达式,这意味着填充REGEXP_SUBSTR()调用的完整签名:
select regexp_substr( locationField, '^([A-Z ]+)$', 1, 1, 'm')
from your_table
/
'm'
是指定多行模式的匹配参数。这意味着匹配模式中的^
和$
被视为newline
边界,而不是字符串的开头和结尾。 Find out more