[英]Regex (Replace)? to match only first and distincted occurences
我遇到了正則表達式的問題。 基本上我有一個包含日期的標題的word文檔。 准備了一個算法,它將從日期中減去數據,並且當每個日期在文件中只有一次時沒有問題,但是當我在每一頁的開頭都有日期時,這種划分就不能正常工作。 我嘗試在(?<day>\d{1,2})-(?<month>\d{1,2})-(?<year>\d{2,4})(?![\s\S]*\1)
但它只匹配最后一個日期,如果我有 3 頁專門用於一天,它只匹配從最后一個。 是否有可能創建僅匹配第一次和不同出現的正則表達式? 因此,如果我有一個日期 3 次,它將匹配第一個日期並且數據將被正確划分? 另一種選擇是我可以替換字符串中不是第一個日期的所有內容。
正則表達式實際上可能像
(?<day>\d{1,2})-(?<month>\d{1,2})-(?<year>\d{2,4})
文件:
13-08-2020
data day1
13-08-2020
data day1
13-08-2020
data day1
14-08-2020
data day2
我想讓那個正則表達式只匹配 13-08-2020 的第一次出現,然后是 14-08-2020 的第一次出現,或者用空格替換日期,這樣它看起來像
13-08-2020
data day1
data day1
data day1
14-08-2020
data day2
您可以通過后視來做到這一點。 以下正則表達式使用肯定的后視並匹配之前已經發生的任何日期:
(?<=[\s\S]*^(\d{1,2}-\d{1,2}-\d{2,4})$[\s\S]*)(^\1$)
這是一個完整的 C# 示例(例如,您可以在https://dotnetfiddle.net/進行測試),它用空字符串替換所有匹配的日期:
using System;
using System.Text.RegularExpressions;
public class Program
{
public static void Main()
{
string myText = "13-08-2020\n"
+ "data day1\n"
+ "13-08-2020\n"
+ "data day1\n"
+ "13-08-2020\n"
+ "data day1\n"
+ "14-08-2020\n"
+ "data day2";
string pattern = @"(?<=[\s\S]*^(\d{1,2}-\d{1,2}-\d{2,4})$[\s\S]*)(^\1$)";
string CleanedString = Regex.Replace(myText, pattern, "", RegexOptions.Multiline);
Console.Write(CleanedString);
}
}
結果:
13-08-2020
data day1
data day1
data day1
14-08-2020
data day2
請注意,這種形式的表達式僅適用於多行模式,即當“^”和“$”匹配行開始/結束而不是字符串開始/結束時。
我將此解決方案基於如何使用 RegEx 刪除文本中的非連續行?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.