簡體   English   中英

匹配從“ Y”到“ Z”的所有“ X”

[英]Match all 'X' from 'Y' until 'Z'

好吧,我希望標題不要太混亂。 我的任務是匹配(並替換) YZ之間的所有X

我使用X,Y,Z因為這些值在運行時可能會有所不同,但這根本不是問題。

到目前為止,我嘗試過的是:

pattern = ".*Y.*?(X).*?Z.*";

實際上有效..但僅適用於一個X 我根本不知道如何匹配這些“標簽”之間的所有X

我也試過這個:

pattern = @"((Y|\G).*?)(?!Z)(X)"

但這與所有X匹配,忽略了“標簽”。

解決我的問題的正確模式是什么? 提前致謝 :)

編輯

一些更多的信息:

X是單個charYZstrings

更真實的測試字符串:

Some.text.with.dots [nodots]remove.dots.here[/nodots] again.with.dots

=>匹配. [nodots][/nodots]

(注意:我在這里使用了類似xml的語法,但是不能保證如此,因此很遺憾 ,我不能使用簡單的xml或html解析器)

在C#中,如果您需要在某個文本塊內替換某些文本,則可以使用(?s)(START)(.*?)(END)類的簡單正則表達式來匹配該塊,然后在匹配評估器中進行匹配在匹配的塊中進行必要的替換。

就您而言,您可以使用類似

var res = Regex.Replace(str, @"(?s)(\[nodots])(.*?)(\[/nodots])",
    m => string.Format(
        "{0}{1}{2}", 
            m.Groups[1].Value,                  // Restoring start delimiter
            m.Groups[2].Value.Replace(".",""),  // Modifying inner contents
            m.Groups[3].Value                   // Restoring end delimiter 
        )
    );

參見C#在線演示

圖案細節

  • (?s) RegexOptions.Singleline修飾符標志的內聯版本
  • (\\[nodots]) -第1組:起始定界符(文字字符串[nodots]
  • (.*?) -第2組:盡可能少包含0個字符
  • (\\[/nodots]) -第3組:結束定界符(文字字符串[/nodots]

暫無
暫無

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

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