大文字の前にスペースを追加する

大文字の前にスペースを追加する

文字列があります。

AddData
TestSomething
TellMeWhoYouAre

など。大文字の前にスペースを追加したい。どうすればいいですか?

答え1

を使用sedし、単語の前にスペースを必要としないとします。

$ sed 's/\([^[:blank:]]\)\([[:upper:]]\)/\1 \2/g' file.in
Add Data
Test Something
Tell Me Who You Are

置換は、スペース以外の文字の直後に大文字を検索し、その間にスペースを挿入します。

これは、複数の連続した大文字を含む文字列(たとえば)に対してWeAreATeam生成されますWe Are ATeam。これをクリーンアップするには、交換を再実行してください。

$ sed -e 's/\([^[:blank:]]\)\([[:upper:]]\)/\1 \2/g' \
      -e 's/\([^[:blank:]]\)\([[:upper:]]\)/\1 \2/g' file.in

答え2

Perl、背面ビューと幅0の正規表現を使用する:

$ perl -pe 's/(?<=\w)(?=[A-Z])/ /g'  file.in 

Tell Me Who You Are                    ## TellMeWhoYouAre
I Am A Regular Expression User         ## IAmARegulaExpressionUser

このバージョンでは、連続した大文字も区別されます。

答え3

sed -r -e "s/([^A-Z])([A-Z])/\1 \2/g"

大文字以外の文字と大文字の間にスペースを追加する

答え4

Pythonソリューション:

#!/usr/bin/env python
from __future__ import print_function
import sys

with open(sys.argv[1]) as f:
    for line in f:
        for char in line:
            if char.isupper():
               print(" "+char,end="")
            else:
               print(char,end="")

テスト実行:

$ ./add_space_to_upper.py input.txt                        
 Add Data
 Test Something
 Tell Me Who You Are

関連情報