2016-09-07 6 views
1

これらの文字列を含む2つの文字列の間のテキストを削除したいと思います。メモ帳で置き換え機能を使用することができれば、私は非常に好きです+ +これを行うには。メモ帳++他の文字列の間に3番目の文字列がある場合、2つの文字列間のテキストの削除

は、ここで私は、変更された必要なもののモックアップだ:

これに変更
asdfnjaslfjsa 
asdfjaskldfsafkldj 
asdfjsadfk 
STRING_1 
sanjvnlamf 
fas g 
gsegvrs 
STRING_2 
STRING_1 
asf sf gfsjasak 
qweuwiouqnv 
STRING_3 
awi iavbfa c 
anfiab 
STRING_2 
STRING_1 
asmorancm 
anib fas 
STRING_2 
sdabfashbdfbc ds 

あなたが探しているものを
asdfnjaslfjsa 
asdfjaskldfsafkldj 
asdfjsadfk 
STRING_1 
sanjvnlamf 
fas g 
gsegvrs 
STRING_2 
STRING_1 
asmorancm 
anib fas 
STRING_2 
sdabfashbdfbc ds 
+0

私の答えがあなたを助けてくれたら、それを解決策としてマークしてください。 – xenteros

答えて

3

は、以下の構築物を用いて達成することができます:

STRING_1 
(?:(?!STRING_2)[\s\S])*? 
STRING_3 
(?:(?!STRING_2)[\s\S])*? 
STRING_2 

STRING_1STRING_2に一致するのは、STRING_3がpresen (このテクニックはと呼ばれ、貪欲なトークンと呼ばれています)。


あなたにも1行にそれを置くことができます。

STRING_1(?:(?!STRING_2)[\s\S])*?STRING_3(?:(?!STRING_2)[\s\S])*?STRING_2 

a demo on regex101.comを参照してください。

+0

美しい!私はそれに取り組んでいましたが、正規表現が最初のSTRING_1を正しいSTRING_2に一致させる問題を回避できませんでした。 – Shovalt

+1

@Shovalt:いくつかの文献が必要な場合:http://www.rexegg.com/regex-quantifiers html – Jan

+0

ありがとう!私がここに来る前に、私はそれを理解しようと多くの時間を費やしていました。 STRING_1(\ n。*){2,7} STRING_3(\ n。*){5,50}?STRING_2' - STRING_3はSTRING_1から常に数行離れていたのでいつSTRING_2がいつも離れていたので、 'STRING_1(\ n。*){2,7} STRING_3'に何かが見つかった場合、STRING_3の前には常に最後のSTRING_1でした。ソリューションほどエレガントではなく、多彩ではありません。私は '(\ n。*)*?STRING_2'をそこで動作させることができなかったので、単に'(\ n。*){5,50}?STRING_2 'を使用しました。なぜなのかご存知ですか? –

関連する問題