Adiciona espaço antes da letra maiúscula

8

Eu tenho cordas:

AddData
TestSomething
TellMeWhoYouAre

e assim por diante. Eu quero adicionar espaço antes de letras maiúsculas. Como posso fazer isso?

    
por HeroFromEarth 01.02.2017 / 14:27

4 respostas

16

Usando sed e supondo que você não quer um espaço na frente da palavra:

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

A substituição irá procurar por uma letra maiúscula imediatamente após um outro caractere que não seja espaço em branco, e inserir um espaço entre as duas.

Para strings com mais de um caractere consecutivo maiúsculo, como WeAreATeam , isso produz We Are ATeam . Para classificar isso, execute a substituição uma segunda vez:

$ sed -e 's/\([^[:blank:]]\)\([[:upper:]]\)/ /g' \
      -e 's/\([^[:blank:]]\)\([[:upper:]]\)/ /g' file.in
    
por 01.02.2017 / 14:41
12

Perl, usando expressões regulares lookbehind e lookahead com largura zero:

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

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

Esta versão também separa letras maiúsculas consecutivas.

    
por 01.02.2017 / 16:08
2
sed -r -e "s/([^A-Z])([A-Z])/ /g"

Adicione espaço entre uma letra que não seja uma letra maiúscula e uma letra que seja uma letra maiúscula

    
por 01.02.2017 / 20:04
0

Solução 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="")

Execução de teste:

$ ./add_space_to_upper.py input.txt                        
 Add Data
 Test Something
 Tell Me Who You Are
    
por 02.02.2017 / 09:38