2017-02-16 8 views
0

会社名(配列キー)の多くには一重引用符が含まれている会社の配列があります。
ただarray keyStarting & Ending単一引用符の間に単一引用符文字をエスケープしたかったです。Regex - 引用符間の一重引用符の検索と置換

正規表現:

('[^']*)'s([^']*') 

サンプル:

'BJs Wholesale Club' => 'A', 
'BJ's Wholesale Club' => 'A', 
'Dillard's' => 'A', 
'Divi's Labs' => 'A', 
'Divis Labs' => 'A', 
'ESKAY K 'N' (PVT) LTD' => 'B', 
'Nahar Ind'l Enterprises' => 'A', 
'Toys 'R' Us' => 'A', 
'ToysR Us' => 'A', 

必要な出力:

'BJs Wholesale Club' => 'A', 
'BJ\'s Wholesale Club' => 'A', 
'Dillard\'s' => 'A', 
'Divi\'s Labs' => 'A', 
'Divis Labs' => 'A', 
'ESKAY K \'N\' (PVT) LTD' => 'B', 
'Nahar Ind\'l Enterprises' => 'A', 
'Toys \'R\' Us' => 'A', 
'ToysR Us' => 'A', 

私の正規表現は、ワットません会社のORKは、他のウ・タント\'sまたは複数の単一引用符が含まれてい

デモ:ひとつひとつを選択することで、それが動作

(?<!^)'(?=.*' =>) 

を:https://regex101.com/r/23aBEI/2

+0

おそらくNotepad ++自体でこれを行うことはできません。それは正規表現のより小さいサブセットを使用し、あなたはそのマッチでどんな処理もすることができません。あなたはJavaScriptを使ってこれをかなり簡単に行うことができます。私は答えに取り組んでいきます。 – Whothehellisthat

+0

@Whathhellisthat正規表現のより小さいサブセット?それは非常に複雑なブーストライブラリを使用しています。 「マッチで処理することはできません」とは、処理を呼び出すことによって異なりますが、たとえば、キャプチャグループを参照しながら一致を置き換えることができます。つまり、正規表現だけではこの作業のための良いツールではないと私は同意します。 – Aaron

+0

@Aaronは、件名で述べたように、引用符と引用符の間に単一引用符をエスケープする必要があります。 – Anon30

答えて

1

これはあなたが脱出したいすべての単一引用符と一致する必要があります((?<!^))の冒頭ではなく、' =>部分((?=.*' =>))によって、ある時点でlookaroundsを使用しています。メモ帳で\\'により、すべての出現箇所を交換

が++、以下の結果が得られます。

'BJs Wholesale Club' => 'A', 
'BJ\'s Wholesale Club' => 'A', 
'Dillard\'s' => 'A', 
'Divi\'s Labs' => 'A', 
'Divis Labs' => 'A', 
'ESKAY K \'N\' (PVT) LTD' => 'B', 
'Nahar Ind\'l Enterprises' => 'A', 
'Toys \'R\' Us' => 'A', 
'ToysR Us' => 'A', 
+0

が動作しない場合は、デモリンクを確認してください。 – Anon30

+0

@ Anon30私はあなたのサンプルでノートパッド++でそれをテストしました。すべてを '\\ ''で置き換える必要があります。 – Aaron

+0

ありがとう@アーロンは、魅力のように動作します。あなたの正規表現を教えてください。 – Anon30

0

この正規表現は、(+オペレータのgreedynessを使用して)全体の会社名と一致しました。

^'([a-zA-Z0-9\(\)' ]+)' 

注:元の文字列も「=> 『A』」を含んでいると、あなたはそれを解析したくない場合は

'([a-zA-Z0-9\(\)' ]+)' 

、あなたがこれを使用することができますあなたが必要になりますメモ帳++は私たちが見て使用することができますPCREを(サポートしているように、グループ1では、この1つの作業

を作るためにmフラグを有効にするには、あなたの会社名

+1

OPは会社名を抽出したくない、彼は会社名 – Aaron

+0

@アロンオハイオ州でシングルクォートをエスケープしたい、私は誤解した。それを助ける場合にはここに残してください。しかし、あなたは正しいようです。 – dquijada

1

を持っています

Vairable後読み:(?<!^|=>)'(?! =>|,$)

をvairable後読みなし:背後にある)、そして、それはまた、複数行をサポートし、我々は以下を使用してそれを行うことができます(?<!^)(?<!=>)'(?! =>)(?!,$)

フラグ:マルチライン。次のように置き換えてください:\\'

+0

PCREは可変長ルックビハインドをサポートしていないため、現在のところコンパイルに失敗します(.NETフレーバは、そうした数少ないものの1つです)。これはあなたのlookbehindを2つに分割することで簡単に修正できます。私は '(?) '(?! => |、$)'をメモ帳++でテストしています。 – Aaron

+0

「可変視覚化なし」バージョンを試してください。 – Whothehellisthat

関連する問題