我有一個巨大的文件,我想刪除文件中除了與我的正則表達式匹配的所有內容。我知道我可以得到比賽,只是提取這些,但我想保留我的文件並擺脫其他一切。匹配除指定正則表達式以外的所有內容
這裏是我的正則表達式:
"Id":\d+
我怎麼說 「百搭除了"Id":\d+
」。東西沿線
!("Id":\d+) (pseudo regex)
?
我想使用它與正則表達式替換功能。在英文中,我想說:
獲取所有不是
"Id":\d+
的文本,並用空字符串替換它。
我有一個巨大的文件,我想刪除文件中除了與我的正則表達式匹配的所有內容。我知道我可以得到比賽,只是提取這些,但我想保留我的文件並擺脫其他一切。匹配除指定正則表達式以外的所有內容
這裏是我的正則表達式:
"Id":\d+
我怎麼說 「百搭除了"Id":\d+
」。東西沿線
!("Id":\d+) (pseudo regex)
?
我想使用它與正則表達式替換功能。在英文中,我想說:
獲取所有不是
"Id":\d+
的文本,並用空字符串替換它。
好吧,與\d
相反的是perl-ish regexes中的\D
。 .net有類似的東西嗎?
是的,.NET確實支持它。 – 2010-10-04 15:51:28
我以前沒有使用.NET,但在之後的java作品
System.out.println("abcd Id:12351abcdf".replaceAll(".*(Id:\\d+).*","$1"));
產生輸出
Id:12351
雖然在真正意義上它不匹配除了標識的一切配套的標準:\ d +,但它的工作
嘗試並查看當字符串中出現兩次'Id:234'時會發生什麼... – 2010-10-04 19:17:41
試試這個:
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?)
。
當你說扔掉其他所有東西時,你的意思是保留包含正則表達式的行還是隻保留匹配正則表達式的字符串? – Rohith 2010-10-04 15:37:28
你是說你想要一個正則表達式匹配除了你的正則表達式匹配的所有東西嗎? – 2010-10-04 15:44:46
你的問題聽起來像一個邏輯思維陷阱。 ;-) – splash 2010-10-04 15:50:48