2010-10-04 101 views
1

我有一個巨大的文件,我想刪除文件中除了與我的正則表達式匹配的所有內容。我知道我可以得到比賽,只是提取這些,但我想保留我的文件並擺脫其他一切。匹配除指定正則表達式以外的所有內容

這裏是我的正則表達式:

"Id":\d+ 

我怎麼說 「百搭除了"Id":\d+」。東西沿線

!("Id":\d+) (pseudo regex)

我想使用它與正則表達式替換功能。在英文中,我想說:

獲取所有不是"Id":\d+的文本,並用空字符串替換它。

+0

當你說扔掉其他所有東西時,你的意思是保留包含正則表達式的行還是隻保留匹配正則表達式的字符串? – Rohith 2010-10-04 15:37:28

+1

你是說你想要一個正則表達式匹配除了你的正則表達式匹配的所有東西嗎? – 2010-10-04 15:44:46

+1

你的問題聽起來像一個邏輯思維陷阱。 ;-) – splash 2010-10-04 15:50:48

回答

1

對不起,但我完全沒有得到你的問題。不應該很容易將匹配變成新文件嗎?

柳寫道:

獲取所有文字,是不是 「ID」:\ d +與和空字符串替換它。

邏輯等價是:

獲取匹配"Id":\d+所有文字,並將其放置在一個新的文件。用新文件替換舊文件。

+1

Micah在他的問題中提到他不想這樣做 – Rohith 2010-10-04 15:40:36

+0

但他說:「我想把文件中的所有東西都吹走,除了與我的正則表達式匹配的東西」,所以我理解它,因爲他希望所有行匹配他的正則表達式。我覺得有點混亂。 – splash 2010-10-04 15:46:56

1

好吧,與\d相反的是perl-ish regexes中的\D。 .net有類似的東西嗎?

+0

是的,.NET確實支持它。 – 2010-10-04 15:51:28

0

我以前沒有使用.NET,但在之後的java作品

System.out.println("abcd Id:12351abcdf".replaceAll(".*(Id:\\d+).*","$1")); 

產生輸出

Id:12351 

雖然在真正意義上它不匹配除了標識的一切配套的標準:\ d +,但它的工作

+0

嘗試並查看當字符串中出現兩次'Id:234'時會發生什麼... – 2010-10-04 19:17:41

2

試試這個:

string path = @"c:\temp.txt"; // your file here 
string pattern = @".*?(Id:\d+\s?).*?|.+"; 
Regex rx = new Regex(pattern); 

var lines = File.ReadAllLines(path); 
using (var writer = File.CreateText(path)) 
{ 
    foreach (string line in lines) 
    { 
     string result = rx.Replace(line, "$1"); 
     if (result == "") 
      continue; 

     writer.WriteLine(result); 
    } 
} 

該模式將保留多個之間的空格Id:編號在同一行上的出現次數。如果每行只有一個Id,則可以從模式中刪除\s?File.CreateText將打開並覆蓋您的現有文件。如果替換結果爲空字符串,它將被跳過。否則結果將被寫入文件。

模式的第一部分匹配編號:編號發生。它包括一個.+的替代匹配Id:Number沒有出現。替換使用$1將匹配替換爲第一組的內容,這是實際的Id部分:(Id:\d+\s?)

相關問題