簡體   English   中英

正則表達式:如果在 x 范圍內以 char 開頭,則不匹配

[英]Regex: dont match if preceeded by char in range x

我正在嘗試使用 Regex (c#) 執行以下操作:

  • 僅當搜索字符串'70'前面沒有ID="時才匹配(不區分大小寫)
  • 並且僅當搜索字符串'70'之前的字符串不包含'+'時才匹配

示例文本(僅用於視覺效果的換行符):

ID="70" Testtext
MultilingualText Uid="70"
Test="+#12-A170"
CV_70

我得到了第一個條件

(?i)(?<!ID=\")70

這將只匹配第 3 行和第 4 行中的70 ,但我不知道如何排除包含'+'的行。 '+'的 position 在搜索字符串前面是可變的。

你可能會使用

(?i)(?<!\+.*)(?<!ID=")70

模式匹配

  • (?i)不區分大小寫的修飾符
  • (?<.\+.*)如果+不在左邊
  • (?<!ID=")如果ID+不是直接在當前 position 的左邊
  • 70匹配 70

.NET 正則表達式演示

string pattern = @"(?i)(?<!\+.*)(?<!ID="")70";
string input = @"ID=""70"" Testtext
    MultilingualText Uid=""70""
    Test=""+#12-A170""
    CV_70";

foreach (Match m in Regex.Matches(input, pattern))
{
    Console.WriteLine(m.Value);
}

Output

70

更新

@anubhava評論的最終工作模式匹配除雙引號外的任何字符

(?i)(?<!\+[^"]*)(?<!ID=")70

.NET 正則表達式演示

暫無
暫無

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

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