我有一个像这样的值的表。
ExpTable
+--------+
|expCol |
+--------+
|abc.abc |
|bcd.123 |
|efg.@/. |
+--------+
而我想要的是,当句点后面的字符是字母或数字时,输出会在点之后添加一个空格,如下所示:
预期输出
+--------+
|expCol |
+--------+
|abc. abc|
|bcd. 123|
|efg.@/. | --the value here stays the same because after the period is not a letter/number
+--------+
我试过了:
SELECT REGEXP_REPLACE(expCol, '.', '. ') from expTable WHERE /*condition*/
正如预期的那样,包括最后一个价值' efg。@ /。'在这期间之后有一个空间。我不知道在WHERE子句中放什么。
答案 0 :(得分:3)
SELECT REGEXP_REPLACE(expCol, '\.([a-zA-Z0-9])', '. \1') AS expCol FROM expTable
OR
SELECT REGEXP_REPLACE(expCol, '[.]([a-zA-Z0-9])', '. \1') AS expCol FROM expTable
输出
EXPCOL
abc. abc
bcd. 123
efg.@/.
LiveDemo
答案 1 :(得分:3)
你可以试试这个。它搜索.
后跟一个单词字符,并用点.
替换它,然后用空格和匹配的字符替换它。
select REGEXP_REPLACE(expCol, '\.(\w)','. \1') FROM ExpTable;
如果您只希望替换第一个此类事件,则可以指定它。
REGEXP_REPLACE(expCol, '\.(\w)','. \1',1,1)
唯一需要注意的是,如果您不想考虑"_"
,请使用[[:alnum:]]
或[a-zA-Z0-9]
来匹配数字,字母和下划线\w
答案 2 :(得分:2)
你可以试试这个。
.
是正则表达式中的关键字,因此您需要将\
放在其前面
SELECT REGEXP_REPLACE(expCol, '\.(\w)', '. \1') from T
sqlfiddle:http://sqlfiddle.com/#!4/94ffec/1