[英]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.