2016-10-27 4 views
1

空白なしのすべての場所を2ワードに置き換える必要があります。最初はポイントで終了し、この2ワードには空白を置きます。空白のないOracle regexp

例えば、私は'num.some'のような文字列を持っていると私は'num. some'

が必要しかし、私は'num. some'を持っている場合、私は'num. some'(< -thisは2空白を持っている)必要はありません

そして私は'123.4'を持っている場合、私はまた、'123. 4' を望んでいないと私は'123.some'を持っている場合、私は正規表現のさまざまな組み合わせを試してみました'123. some'

必要がありますが、私はいつも持っていました私の答えに何か間違っています。このような

+1

は、あなたがこれまでに試したものを投稿してください、あなたは – Aleksej

+0

を持っている問題は、あなたが 'データでsome.123'を持っている、とにその必要性を行いでしたスペースも追加しましたか? – mathguy

答えて

2

何かあなたを助けるかもしれない:空白スペースのない

WITH examples AS (
    SELECT 'num.some' str FROM dual 
    UNION 
    SELECT 'num. some' str FROM dual 
    UNION 
    SELECT '123.4' str FROM dual 
    UNION 
    SELECT '123.some' str FROM dual 
) 
SELECT str, REGEXP_REPLACE(str,'([a-zA-Z0-9]+)\.([a-zA-Z]+)','\1. \2') replaced 
FROM examples 

これは、文字が続く文字の後にポイントを探し

+0

2回目の2回目の単語(後の単語) 私は 'ドル.USA'を持っていました。これはドル。 USA ' なぜか分からないのですか? –

+0

@AnastasiaSisordia「dol.USA」と一緒に働いています – pablomatico

0

これは、すべての組み合わせ(letter.letter、letter.digitを探します、digit.letter)、スペースの後ろにスペースを追加します。 digit.digitは変更しません。

with 
    inputs (str) as (
     select 'ab.sw' from dual union all 
     select 'ab. sw' from dual union all 
     select '12.33' from dual union all 
     select '12. 33' from dual union all 
     select 'ab.123' from dual union all 
     select '1. ab' from dual union all 
     select '1.abc' from dual 
    ) 
-- END test data. Solution (SQL query) begins below this line. 
select str, regexp_replace(str, 
      '(([[:alpha:]]\.)([[:alpha:]])|([[:alpha:]]\.)(\d)|(\d\.)([[:alpha:]]))', 
      '\2\4\6 \3\5\7') as new_str 
from inputs 
; 


STR  NEW_STR 
------ ------- 
ab.sw ab. sw 
ab. sw ab. sw 
12.33 12.33 
12. 33 12. 33 
ab.123 ab. 123 
1. ab 1. ab 
1.abc 1. abc 
0

多分あなたは正規表現を必要としません。平野replace()があなたによく役立つかもしれません。

(@mathguyに関してでテストデータ)

with 
    inputs (str) as (
     select 'ab.sw' from dual union all 
     select 'ab. sw' from dual union all 
     select '12.33' from dual union all 
     select '12. 33' from dual union all 
     select 'ab.123' from dual union all 
     select '1. ab' from dual union all 
     select '1.abc' from dual 
    ) 
-- END test data. Solution (SQL query) begins below this line. 
select replace(
    replace(str, '.', '. ') -- replace all dots by dot+space 
, ' ' 
, ' ' 
) -- replace all double spaces by a single space 
from inputs 
;