如何在Python中将所有特殊字符移动到字符串的末尾?

时间:2016-12-09 06:00:10

标签: python regex

我试图将所有非字母数字字符过滤到字符串的末尾。我正在使用正则表达式很难,因为我不知道我们的特殊字符在哪里。这里有几个简单的例子。

hello*there*this*is*a*str*ing*with*asterisks
and&this&is&a&str&ing&&with&ampersands&in&i&t
one%mo%refor%good%mea%sure%I%think%you%get%it

我如何将所有特殊字符滑动到字符串的末尾?

这是我尝试过的,但我没有得到任何东西。

re.compile(r'(.+?)(\**)')
r.sub(r'\1\2', string)

修改

第一个字符串的预期输出为:

hellotherethisisastringwithasterisks********

2 个答案:

答案 0 :(得分:6)

这里不需要正则表达式。只需使用str.isalpha并构建两个列表,然后加入它们:

strings = ['hello*there*this*is*a*str*ing*with*asterisks',
'and&this&is&a&str&ing&&with&ampersands&in&i&t',
'one%mo%refor%good%mea%sure%I%think%you%get%it']
for s in strings:
    a = []
    b = []
    for c in s:
        if c.isalpha():
            a.append(c)
        else:
            b.append(c)
    print(''.join(a+b))

结果:

hellotherethisisastringwithasterisks********
andthisisastringwithampersandsinit&&&&&&&&&&&
onemoreforgoodmeasureIthinkyougetit%%%%%%%%%%

替代print()调用Python 3.5及更高版本:

print(*a, *b, sep='')

答案 1 :(得分:0)

以下是我使用正则表达式提出的解决方案:

import re

def move_nonalpha(string,char):
     pattern = "\\"+char
     char_list = re.findall(pattern,string)
     if len(char_list)>0:
         items = re.split(pattern,string)
         if len(items)>0:
             return ''.join(items)+''.join(char_list)

用法:

string = "hello*there*this*is*a*str*ing*with*asterisks"
print (move_nonalpha(string,"*"))

给我输出:

hellotherethisisastringwithasterisks********

我尝试了其他输入模式并且它正在工作。希望它能帮到你。