2016-05-24 1 views
1

CSVファイルにファイル名のリストを解析しようとすると、1行につき最初の2 -文字を|に変換します。問題は、ファイル名自体にも私が探している文字が含まれていることです。その場で交換するNotepadd ++を使用したregexをメモ帳で使用して、1行につき最初の2つのマッチだけを置き換えることができます。

12055371-1-Florence - BW Letter of Intent HB Comments 9-4-14-2.DOCX 
12057668-2-EB-DUE-M- SBuxbaum FHA Benefit Plans-2.DOCX 
12058210-1-Redline Letter of Intent-2.PDF 
12058029-3-Florence Hospital--Order Establishing Bid Procedures-HB 9-23-14-2.DOCX 
12058020-10-Florence - BW Letter of Intent 10,10,14 Revisions-2.DOCX 

が、私はこれらのアイテムを識別し、交換するために動作するどのような正規表現はよく分からない:

私の生データは次のようになります。

+0

** [代替](https://regex101.com/r/zB6tX4/1)** – rock321987

答えて

2

が第二-までの行の先頭に一致する、-と一致しないでください:

match ^(.*?)-(.*?)- 
replace by \1|\2| 

説明:

  • ^は、行の先頭に一致する(0幅マッチ) 。
  • (.*?)は、貪欲ではない方法ですべての文字に一致します。次の文字が一致すると、そうすることができます。結果は後で参照できるようにグループ化されています。
  • \1および\2は、逆参照であり、2つの(.*?)グループを参照しています。

注:効率のためにあなたはすべての文字が、-、それはこの文脈では特別な文字だから-がエスケープされていることを意味否定クラス[^\-]によって非欲張りマッチを置き換えることができます。グループは([^\-]*)になります。もちろん、1回限りの操作であれば実際には関係ありません。

関連する問題