2016-08-09 11 views
1

私は1つの単語に基づいて内部の文章を削除したいと思います。だから、ちょうど 'スタート'の代わりに、私はregexステートメントが 'start.stop'を返すようにします。正規表現の一致内部 '。'

>>> import re 
>>> s = 'start.stop.do nice.' 
>>> re.sub(r'\..*nice.*', '', s) 
'start' 

答えて

1

あなたは他の文章でドットを合わせるのを拒否する代わりに.*negated character classを必要としています。そして、最後のドットを保存するために、最後のドットにpositive-lookaheadを使用して、正規表現エンジンがそれを捕捉しないようにすることができます。

>>> re.sub(r'\.[^.]*nice[^.]*(?=\.)', '', s) 
'start.stop' 

@bfontaineによってもう一つの良い例:

>>> s = "foo.bar.nice.qux" 
>>> re.sub(r'\.[^.]*nice[^.]*(?=\.)', '', s) 
'foo.bar.qux' 
+0

注 'S'は' "foo.bar.nice.qux" であれば、 '、これは' ' "foo.barqux" を返すこと。 – bfontaine

+0

@bfontaine確かに、良いメモ!ただ固定しました;-) – Kasramvd

+0

@ Kasramvd: '(?= \。)'はまったく必要ありません。あなたは? https://regex101.com/r/zN7xW9/1を参照してください。 –