大写字母前添加空格

大写字母前添加空格

我有一个字符串:

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,使用lookbehind 和lookahead 零宽度正则表达式:

$ 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

相关内容