2017-05-06 11 views
1

一部のテキストをクリーンアップしますか?だから、\w\s以外のものを削除したいだけでなく、'を単語の中に入れておきたい。 (例えば、私は'を保つ単語内の単語以外の文字は削除しますが、単語内の空白と一重引用符を削除してください。

perl -plE "s/[^\w\s']//g" <<< "'a:b/c d????ef' don't" 

を行うことができ

don'tのような言葉でそれを維持したいが、それはそれは

'abc def' don't 
を印刷します例えば、文字列の初めか終わりにも、それを保持します

私はを実装することができません。(?<\w)'(?=\w)のように、'を削除してください(例:2文字の間でない場合)

指名手配結果:これを行うにはどのように

abc def don't 

あなたがこれを行うことができます

答えて

3

s/[^\w\s']|(?<!\w)'|'(?!\w)//g 

  • ない文字(ワード文字またはスペースまたは')、または
  • のいずれかであるすべてのものを削除します'こと単語の前に単語の文字がないか、または
  • 'の後に単語の文字が付きません。

最初の句は、われわれが明らかに保持したくないすべての文字にマッチします(そして削除します)。

2番目と3番目の句は、両方の単語の文字で囲まれていない限り、すべて'文字を削除します。

あなたはまた、グローバルな研究代わりの交換、あなただけあなたが残しておきたいものを記述する必要があり、パターンがより簡単になり、このように使用することができます
+1

を'。 –

+0

@CasimiretHippolyte True、それは同じ効果があります。しかし、読んだり理解するのにもうちょっと時間がかかります。 – melpomene

2

:あなたは `\ Bとあなたの前後参照を置き換える必要があります

perl -ne"print /[\w\s]|\b'\b/g" <<< "'a:b/c d????ef' don't" 
+0

素敵!私が正しく理解するなら、 '\ b '\ b'は'(?<\ w)'(?= \ w) 'と同じですが、**はるかに単純です。 :) – Nemo

+0

@ニモ:そう考えてみると、他のすべてのケースを何も検索しないで検索するのではなく、単語の境界に囲まれた単語、空白、引用符を見つけることが考えられます。あなたのlookbehinds '(?<= ...)'で '='を忘れないでください。 –

関連する問題