我试图将所有非字母数字字符过滤到字符串的末尾。我正在使用正则表达式很难,因为我不知道我们的特殊字符在哪里。这里有几个简单的例子。
hello*there*this*is*a*str*ing*with*asterisks
and&this&is&a&str&ing&&with&ersands&in&i&t
one%mo%refor%good%mea%sure%I%think%you%get%it
我如何将所有特殊字符滑动到字符串的末尾?
这是我尝试过的,但我没有得到任何东西。
re.compile(r'(.+?)(\**)')
r.sub(r'\1\2', string)
修改
第一个字符串的预期输出为:
hellotherethisisastringwithasterisks********
答案 0 :(得分:6)
这里不需要正则表达式。只需使用str.isalpha
并构建两个列表,然后加入它们:
strings = ['hello*there*this*is*a*str*ing*with*asterisks',
'and&this&is&a&str&ing&&with&ersands&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********
我尝试了其他输入模式并且它正在工作。希望它能帮到你。