2016-10-09 9 views
2

私はいくつかの顧客のコメントに文法規則に従わなかったものがあります。例えば、前の文についてのより多くの説明を提供する以下の文中の(Such as s and b.)は、2つの点で囲まれている。カッコの前にドットをスペースで置き換える正規表現

text = "I was initially scared of ANY drug after my experience. But about a year later I tried. (Such as s and b.). I had a very bad reaction to this." 

まず、私は. (Such as s and b.).を検索し、空間に(Such as s and b.)前にドットを交換したいです。これは私のコードですが、動作しません。

text = re.sub (r'(\.)(\s+?\(.+\)\s*\.)', r' \2 ', text) 

出力は次のようになります。

"I was initially scared of ANY drug after my experience. But about a year later I tried (Such as s and b.). I had a very bad reaction to this." 

私のpythonを使用しています。

+1

上で実行を参照してください、あまりにも、常にそこに '' \ 'です?私はパターンにそれらを含める必要があると思います。 –

+0

@WiktorStribiżew、いいえ、私はテキストを編集しました。 – Mary

+0

あなたのパターンは 'r '(\。)(\ s + \(。+?\)\ s * \)' 'でなければならず、置換は' r' \ 2''である必要があります。または、これを試してみてください。['re '(r' \。(\ s + \([^)] * \)\ s * \。) '、r' \ 1 '、text)'](http:// ideon.com/rFGpqj) –

答えて

1

提供されたサンプルはあまり意味がありません。変更されるのは、 `文字が1つ左の位置に移動されるためです。

しかし、これは(paranthesis内部ドット保つために)トリックを行う場合があります

text = re.sub(r'\.\s*\)\s*\.', '.)', text) 

するか、これが外にそれを持っている:

text = re.sub(r'\.\s*\)\s*\.', ').', text) 

編集:それとも」これを見て、開かれたparanthesisの前に点を置き換えますか?

text = re.sub(r'\.(?=\s*\(.*?\)\.)', ').', text) 
+0

正規表現は2つのドットで囲まれた "。(sとbのような)"を見つけることができるはずです。最初のドットを削除します。 – Mary

+0

第3のものはそれだけですべきです。 :) – Lucero

+0

ありがとう! 2番目と3番目のソリューション作業。しかし、最初のものは動作しません。 – Mary

1

私はそれら以下、別の1があるときに括弧の前にドットを削除するには、これをお勧めします:

text = re.sub(r'\.(\s*?\([^)]*\)\s*\.)', r'\1', text) 

は、それがrepl.it

+0

まず、2つの点で囲まれた括弧をすべて見つける必要があります。たとえば、 "。(abc)"となります。または "。(aaaaa)。"最初の点を削除します。だから私はこの文章で括弧を見つける必要はありません: "私は学校に通った(天気は暖かかった)" – Mary

+0

しかし、あなたの例では、2番目の変更を加え、点を閉じ括弧の後ろに置いた。それはタイプミスですか?ああ、私はあなたの質問を更新してください.... – trincot

+0

OK、私はあなたの元の質問のバージョンで発生したバッククッキーによって誤解されました。私の答えを更新しました。 – trincot

関連する問題