我有一个字符串'MCDONALD_YYYYMMDD.TXT'我需要使用正则表达式并在给出的字符串中的字母'D'后附加'**'。 (即在位置9的字符串我需要附加'*'基于列值'star_len' 如果star_len = 2的o/p =''MCDONALD ?? _YYYYMMDD.TXT' 如果star_len = 1 O/p =“” MCDONALD?_YYYYMMDD.TXT”如何在下面给出的字符串上应用正则表达式
回答
select regexp_replace('MCDONALD_YYYYMMDD.TXT','MCDONALD','MCDONALD' ||
decode(star_len,1,'*',2,'**'))
from dual
这是你如何能做到这一点。我不认为你需要它作为一个正则表达式但如果它总是将是‘麦当劳’ 。
编辑:如果您需要将提供字符串中的位置,以及,我觉得一个普通的旧子应该工作
select substr('MCDONALD_YYYYMMDD.TXT',1,position-1) ||
decode(star_len,1,'*',2,'**') || substr('MCDONALD_YYYYMMDD.TXT',position)
from dual
。
其中position和star_len是您提供的某个表格中的两列(而不是双列)。
EDIT2:只是为了更清楚,这里是
with testing as
(select 'MCDONALD_YYYYMMDD.TXT' filename,
9 positionnum,
2 star_len
from dual)
select substr(filename,1,positionnum-1) ||
decode(star_len,1,'*',2,'**') ||
substr(filename,positionnum)
from testing
这看起来相当不错,但是如果我有一个'position'= 9和'star_len'= 1的列,那么我的o/p ='MCDONALD?_123456.TXT'如何根据这个条件来编写 –
@SanthoshPogaku - 做什么你的意思是“'position'= 9?你是在一个固定的位置追加,而不是在下划线和日期之前?你应该在原文中做得更清楚。如果这确实是你的要求,那么它比任何正则表达式的解决方案,但要确保原始问题是清楚的 – mathguy
我很抱歉它不是一个固定的位置先生它需要依赖于位置值列如何处理该场景? –
with
inputs (filename, position, symbol, len) as (
select 'MCDONALD_20170812.TXT', 9, '*', 2 from dual
)
-- End of simulated inputs (for testing purposes only, not part of the solution).
-- SQL query begins BELOW THIS LINE.
select substr(filename, 1, position - 1) || rpad(symbol, len, symbol)
|| substr(filename, position) as new_str
from inputs
;
NEW_STR
-----------------------
MCDONALD**_20170812.TXT
宾果!现在完善它的作品。我会他狡猾地谢谢你的时间:) –
@SanthoshPogaku - 如果问题得到解答,您应该选择一个正确的答案(也许承认其他有用的答案也upvoting)。 – mathguy
对于它的乐趣使用与子句,以便它在运行时中添加表另一个例子,这里有一个regex_replace解决方案。因为即使您的示例使用了问号,您的变量也会被调用,所以我使用了明星。正则表达式将文件名字符串分为两部分,第一部分是从位置值前的1个字符开始,第二部分是字符串的其余部分。替换将捕获的部分与星星之间放回。
with tbl(filename, position, star_len) as (
select 'MCDONALD_20170812.TXT', 9, 2 from dual
)
select regexp_replace(filename,
'^(.{'||(position-1)||'})(.*)$', '\1'||rpad('*', star_len, '*')||'\2') as fixed
from tbl;
如果你正在使用'REGEXP_REPLACE()',你不需要匹配模式中的'(。*)$'位 - 只需从替换字符串中删除它并且还可以使用'||'\ 2''。像这样:'select regexp_replace(filename,'^(。{'||(position-1)||'})','\ 1'|| rpad('*',star_len,'*'))as fixed ' – mathguy
- 1. 如何用正则表达式表示下面的字符串?
- 2. php:如何正则表达式替换下面的字符串?
- 3. 用户给出的正则表达式检查字符串
- 4. 正则表达式在上下文中的字符串
- 5. 在流上应用正则表达式以提取字符串
- 6. 正则表达式的正则表达式的Java字符串
- 7. 正则表达式与前面的任何字符和给定的字符串
- 8. 需要java的正则表达式下面的字符串
- 9. 正则表达式(正则表达式)的子字符串
- 10. 字符串使用正则表达式替换正则表达式字符类
- 11. 蟒蛇正则表达式给出空字符串
- 12. valdiating字符串上的正则表达式字符串数组
- 13. 正则表达式字符串由以下字符串竖线
- 14. 正则表达式正则表达式匹配字符串
- 15. Javascript正则表达式 - 正则表达式拆分字符串
- 16. 如何在Interpolated字符串上制作正则表达式
- 17. Perl正则表达式用正则表达式的子串替换字符串
- 18. 用字符串表示正则表达式还是不用字符串表达正则表达式?
- 19. 如何找出与正则表达式匹配的字符串
- 20. 正则表达式引用字符串
- 21. 正则表达式字符串在python
- 22. 正则表达式 - 在字符串
- 23. 正则表达式在字符串
- 24. 正则表达式在字符串
- 25. 正则表达式在字符串
- 26. 如何使用长正则表达式的字符串在PHP
- 27. 如何使用^(字符串的开始)在正则表达式
- 28. php如何为以下字符串创建正则表达式
- 29. 正则表达式则表达式匹配的字符串
- 30. 正则表达式:取字符串字面特别重字符
再试一次。您的字符串是否总是包含句点和扩展名?在此期间之前,字符“下划线”后跟八位数字? (我认为它是数字而不是字母Y,M和D,对不对?)请不要与我们一起玩“猜我的要求”游戏。 – mathguy
是的。在实时数据中,它将类似于MCDONALD_20170501.TXT,如果star_len = 1,那么o/p应该是= MCDONALD?_20170501.TXT –
您从星号\ * \ *更改为问号? - 为什么? (也许堆栈溢出编辑器给你带来了麻烦......如果你没有看到星号,用一个反斜杠来转义它,如下所示:\\ * ...或者将所有内容都包含在后引号中以呈现为代码段。 ) – mathguy