簡體   English   中英

C# 正則表達式替換忽略特定字符串

[英]C# Regex Replace ignore specific string

由於這是我在 stackoverflow 上的第一個問題,我希望我的問題被正確提出。

基本上我有一個 normal.txt 文件,其中包含任何文本,例如:

car accident
people died
cat without owner


<!-- Text added at 6/29/2011 9:20:38 AM -->

Some addintional Text
other Text added
add Text

我有一個寫入/附加 function 允許用戶 append 一些文本並設置一個小時間戳。

所以我的問題是:使用另一個 function,您可以搜索和替換文本文件中的文本,但您可以猜測是否有人想要替換“文本”這個詞,它也會在 xml 樣式的注釋(時間戳)中被替換。

到目前為止我的結果是

content = Regex.Replace(content,"[^<+.*"+input+".*>+]*", replace);
//content = content of the .txt file, input = search term, replace = string to replace

但這失敗得很慘,因為一些正則表達式專業人士會在不執行它的情況下看到它。

現在我希望一些正則表達式專業人士可以在這里幫助我,並為我提供一個替換普通文本但忽略時間戳的搜索模式。

直到現在我才真正意識到正則表達式的邏輯,但是我理解單個表達式,所以這將是我更正確地理解正則表達式的一個鈎子。

謝謝指教。

如果我正確理解您的問題,您希望替換“文本”的每個實例,但評論中的實例除外。

最簡單的方法是使用否定的lookbehind(這里的描述很棒),如下所示:

content = Regex.Replace(content, @"(?<!<!--.*?)" + input, replace);

您正在做的是嘗試用 replace 中的值replace非 <+.*> 或input中包含的字符的任意長度的重復。

如果您要經常使用 Regex,我強烈建議您閱讀上面的網站。 這是我發現的對 Regex 的最佳介紹,現在花費的時間將為您以后省去很多麻煩!

編輯

感謝@stema 更新以增加靈活性

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM