[英]Match all 'X' from 'Y' until 'Z'
好吧,我希望標題不要太混亂。 我的任務是匹配(並替換) Y
和Z
之間的所有X
我使用X,Y,Z
因為這些值在運行時可能會有所不同,但這根本不是問題。
到目前為止,我嘗試過的是:
pattern = ".*Y.*?(X).*?Z.*";
實際上有效..但僅適用於一個X
我根本不知道如何匹配這些“標簽”之間的所有X
我也試過這個:
pattern = @"((Y|\G).*?)(?!Z)(X)"
但這與所有X
匹配,忽略了“標簽”。
解決我的問題的正確模式是什么? 提前致謝 :)
一些更多的信息:
X
是單個char
, Y
和Z
是strings
更真實的測試字符串:
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.