2016-04-08 15 views
0

私は崇高なテキストや他のテキストエディタで完全に機能する正規表現を持っています。PowerShellでエスケープする正規表現

はここPowerShellで正規表現

(?sm),"([\w\W]*?)Date completed: 

問題がある、ある、それだけで何もしません。

これは私の小さなスクリプト

$text = Get-Content c:\Tools\export.csv 
$text -replace '(?sm),"([\w\W]*?)Date completed: ','REPLACED' | Out-File output.csv 

私は、プレーンテキストによる定期的な表現を交換した場合、それは素晴らしい作品です。それで私の正規表現では好きではないことは何ですか?

ありがとうございます!

+0

「プレーンテキスト」とはなんですか? – sln

+0

正規表現を 'Example'のようなものに置き換えると、Exampleが見つかり、それをREPLACEDに置き換えます。 – JonYork

+0

コンマと二重引用符はここでは ''(?​​sm)です。([\ w \ W] *?)完了日:'あなたのソースには存在しないと思われるカンマと二重引用符が必要ですあなたがここには含まれていないデータです。もっと重要なのは、シングルモードとマルチモードを使用することを期待するならば、 '$ text'を単一の文字列に変更する必要があるということです。 | out-string' ...書き込みと回答をするだけです – Matt

答えて

0

を持っている場合、私は私が定期的にするために行うために必要なものを達成することができた方法です式

$text = (Get-Content c:\Tools\export.csv) | out-string 

$regex = "(?sm),""\s.*?Date completed: " 
$replace = ',"' 
$output = [regex]::replace($text,$regex,$replace) 

$output | Out-file c:\Tools\output.csv -Encoding ascii 
0

シングルモードとマルチモードを使用しているときにマッチしようとしているものに関係なく、マルチライン文字列で動作するはずです。 Get-Contentは、デフォルトで文字列を返します。 -replaceは配列演算子として機能し、そのパターンを各行に対して個別に実行します。

したがって、最初に$textを1つの文字列にします。

$text = Get-Content c:\Tools\export.csv | Out-String 

それとも、私はここに、答えた人から得た情報に基づいて少なくともPowerShellの3.0

$text = Get-Content c:\Tools\export.csv -Raw 
関連する問題