簡體   English   中英

C#正則表達式刪除行

[英]C# Regex remove line

我需要在C#中應用正則表達式。 字符串如下所示:

MSH|^~\&|OAZIS||C2M||20110310222404||ADT^A08|00226682|P|2.3||||||ASCII
EVN|A08
PD1
PV1|1|test

我想要做的是刪除所有只包含3個字符的行(沒有分隔符'|')。 所以在這種情況下,必須刪除'PD1'行(第3行)。 正則表達式可以實現嗎?

謝謝

如果沒有正則表達式,以下將執行您想要的操作。

String inputString;
String resultingString = "";
for(var line in inputString.Split(new String[]{"\n"})) {
    if (line.Trim().Length > 3 || line.Contains("|"))
        resultingString += line + "\n";
}

這假設您將文件作為一個大字符串。 它會為您提供另一個刪除必要行的字符串。

(或者您可以直接使用該文件:

string[] goodLines = 
    // read all of the lines of the file
    File.ReadLines("fileLocation").
        // filter out the ones you want
        Where(line => line.Trim().Length > 3 || line.Contains("|")).ToArray();

最終得到一個String [],其中包含文件中所有正確的行。)

這個: (?<![|])[^\\n]{4}\\n表達式在我使用的在線正則表達式測試中匹配你想要的,但我相信{4}實際上應該是{3} ,所以嘗試切換它們,如果它不適合你。

編輯:

這也有效: \\n[^|\\n]{3}\\n並且可能更接近您正在尋找的內容。

編輯2:

數字括號絕對是{3} ,在家測試。

你可以使用Regex做到這一點

string output = Regex.Replace(input, "^[a-zA-Z0-9]{3}$", "");

[a-zA-Z0-9]將匹配任何字符或數字{3}將匹配3的確切數字

為什么不只是獲取文件的句柄,創建一個臨時的輸出文件,並逐行運行。 如果有一個包含3個字符的行,則跳過它。 如果文件可以完全保存在內存中,那么可以使用GetLines()(我認為這是調用該方法的方法)來獲取逐行表示文件的字符串數組。

這個正則表達式將識別符合排除標准的行^[^|]{3}$然后它只是迭代所有行(包含數據)並檢查哪些符合排除標准。 比如這樣。

foreach(Match match in Regex.Matches(data, @"^.+$")
{
  if (!Regex.IsMatch(match.Value, @"^[^|]{3}$"))
  {
     // Do Something with legitamate match.value like write line to target file.
  }
}

這三個角色總是在一條線上嗎? 如果是這樣,您可以使用字符串標記的字符串/結尾的開頭。

這是一個正則表達式,它匹配字符串上的三個字符:

\A.{3}\z

\\ A是字符串的開頭。 \\ z是字符串的結尾。 是任何字符,{3}有3次出現

^ - 行的開始。 \\ w - 單詞字符{3} - 正好代表3次$ - 行尾

^\w{3}$

從我迄今為止發布的解決方案中得到的一般觀察結果。 原始問題包括評論“刪除所有包含3個字符的行”[我的重點]。 我不確定你的字面意思是“只有3個字符”,但如果你這樣做,你可能想要改變所提出的解決方案的邏輯

   if (line.Trim().Length > 3 ...)

   if (line.Trim().Length != 3 ...)

...例如,萬一有2個字符的行確實有效。 (建議的正則表達式解決方案的想法相同。)

問題有點模糊。

如上所述,答案是這樣的

(?:^|(?<=\\n))[^\\n|]{3}(?:\\n|$)允許匹配中的空格。
所以"#\\t)"也將被刪除。

要將字符限制為可視(非空白),您可以使用
(?:^|(?<=\\n))[^\\s|]{3}(?:\\n|$)
哪個doesent允許空格。

對於兩個上下文都是單個字符串,替換是''和全局。
perl中的示例上下文: s/(?:^|(?<=\\n))[^\\n|]{3}(?:\\n|$)//g

嘗試這個:

text = System.Text.RegularExpressions.Regex.Replace(
        text, 
        @"^[^|]{3}(?:\r\n|[\r\n]|$)", 
        "", 
        System.Text.RegularExpressions.RegexOptions.Multiline);

暫無
暫無

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

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