2017-07-09 14 views
-1

「Mary's !!」という文字列があると、私は "Mary's!"を手に入れたいので、単語の途中ではなく、文字列内の各単語の最初と最後、またはその両方で、アルファベット以外の文字が1つだけ削除されます。単語の末尾からアルファベット以外の文字を削除する方法

私はこれまでのところ、Pythonでこれを持って3つの

import re 
s = "Mary's!! string. With. Punctuation?" # Sample string 
out = re.sub(r'[^\w\d\s]','', s) 
print(out) 

この出力:

"Marys string With Punctuation" 

、それはこのようにする必要がありながら、それは、すべてのものを削除します。

"Mary's! string With Punctuation" 
+0

スプリット? – PYA

+0

文字列の先頭と末尾がアルファベット以外の文字で始まらない場合はどうなりますか? –

+0

はい、スペースで区切られています。最後には、単語に2文字以上のアルファベット以外の文字が含まれていれば、最後のものだけを削除する必要があります。 –

答えて

1

あなたは必要になる場合がありその横にスペースがあることを確認してください(文字列の開始/終了)。

re.sub(r'(\s|^)[^\w\d\s]|[^\w\d\s](\s|$)', r'\1\2', s) 

か、あるいは周りのルックで:末尾のスペースと文字列の英数字以外の

re.sub(r'(?<!\S)[^\w\d\s]|[^\w\d\s](?!\S)', '', s) 
+0

ありがとう、trincotはうまくいきました –

+0

見た目はアポストロフィを削除するようです。ループでそれを行う他の方法はありますか? –

+0

2番目の正規表現にタイプミスがあります。 '(?!<'の代わりに '?<!'にする必要があります。 – trincot

関連する問題