2016-12-09 6 views
0

文字列の末尾に英数字以外の文字をすべてフィルタリングしようとしています。私は特殊文字がどこにあるのかわからないので、正規表現では苦労しています。ここにいくつかの簡単な例があります。すべての特殊文字をPythonの文字列の末尾に移動する方法は?

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******** 
+0

regexではなく、いくつかの文字列操作関数を使用します。 – TheLostMind

+0

@anubhava質問をサンプル出力で更新しました。 – user1362058

答えて

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)) 

結果:Pythonの3.5と高いため

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

代替print()コール:ここ

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

Pythonの文字列ページを調べましたが、isalphaは一般的な操作やメインの文字列ライブラリページには表示されませんでした。私はそれを具体的に探すことは決して考えなかったでしょう。ありがとう。 – user1362058

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******** 

私は同様にあなたの他の入力パターンを試してみましたし、それが働いています。それが助けてくれることを願って。

+0

ええと、正規表現の解決法は、文字列操作を使用する場合と同じくらいエレガントではありません。私はそれが通常私の経験であったので、それは別の方法だったと思った。 – user1362058

関連する問題