2016-05-02 10 views
0

文字列の先頭と末尾にある句読点(ドットを除く)をすべて削除しますが、途中には挿入しません。正規表現で区切り記号を付ける - python

元の文字列のために例えば

@#%%.Hol$a.A.$% 

私は端から除去されなく単語の途中から始まる単語.Hol$a.A.を取得したいと思います。

別の例は、文字列を次のようになります。使用できる文字が繰り返された場合、我々は気にしないので、この場合は

@#%%...&Hol$a.A....$% 

返される文字列は..&Hol$a.A....でなければなりません。

アイデアは、単語の先頭と末尾にある句読点(ドットを除く)をすべて削除することです。単語は、\wおよび/または.

のように定義されます。具体的な例は、文字列'Barnes&Nobles'です。テキスト解析では、Barnes&Noblesを単一のエンティティとして認識することが重要ですが、'

Regexを使用して目標を達成するにはどうすればよいですか?これは、式の中のドットの前と後のすべてのものを削除します

import re 
res = re.search(r"^[^.]*(.[^.]*.([^.]*.)*?)[^.]*$", "@#%%.Hol$a.A.$%") 
mystr = res.group(1) 

+0

[文字列からすべての特殊文字、句読点やスペースを削除](http://stackoverflow.com/questions/5843518/remove-all-special-characters-punctuation-andの可能性のある重複-space-from-string) –

+0

@LaxmikantGurnalkar:重複していません。 – AKS

+2

@ user2288043:例をさらに投稿できますか?他のケースをカバーするのに役立つものは1つだけです。 – AKS

答えて

2

は、このシンプルかつ簡単に適応正規表現を使用します。

[\w.].*[\w.] 

それはまさにあなたの望ましい結果、より多くの何もマッチします。

  • [\w.]マッチ任意の英数字とドット
  • .*マッチ(通常は改行を除く)任意の文字
  • [\w.]マッチ任意の英数字の文字と区切り文字を変更するには、ドット

、単に変更角括弧内に許容される文字のセット。

Check this regex out on regex101.com

import re 
data = '@#%%.Hol$a.A.$%' 
pattern = r'[\w.].*[\w.]' 
print(re.search(pattern, data).group(0)) 
# Output: .Hol$a.A. 
+0

これは、ユーザが多くの詳細や例を提供していないことを考慮して一般的なものです。 – AKS

+0

これは魅力として機能します。ドットの数は重要ではありませんでした。もう一つの例は、文字列@#%% .... Hol $ aA ... $%です。 ... Hol $ aA ... – user2288043

+0

@ user2288043この回答があなたの問題を解決した場合は、その左側のチェックボタンをクリックして問題を解決してください。 –

1

あなたは句読点をストライピングで何を意味するかに応じて、次のコードを適応させることができます。 警告文字列が一致しない場合は、結果が[None]と異なるかどうかを確認する必要があります。

+0

これは、結果の文字列がドットで区切られている場合にのみ有効です。この仕事にはもっと一般的な(そしてより単純な)表現があります。 –

+0

ドットの直前にアルファベットがある場合、 '@#%% a.Hol $ a.A。$%'のように動作しません。 – AKS

+0

はい、問題は詳細に欠けていました。私は最初のドットの前と最後のドットの後ろで何かを取り除きたいと思った。 特定の文字を排他的に削除する場合は、正規表現は使用できません。 – Richard

関連する問題