[英]Regular Expressions Replace with Placeholders
我有一個字符串:
AAA foobarfoobarfoobar foo baar bar foo BBB and so on
替換后,它看起來應該像:
AAA foobarfoobarfoobar foo baar bar foo
基本上,BBB及其后面的所有內容都將被剝離。 所以我首先想到的是這樣的表達:
BBB.*
實際執行工作。 但是,如果BBB站在AAA后面,我只想讓它工作,這樣
BBB bbb AAA aaa BBB ccc
將被替換為
BBB bbb AAA aaa
第一個BBB停留在這里,因為它前面沒有AAA。
我的想法是這樣的表達
AAA.*?BBB.*
這會匹配我認為正確的部分,但是也會殺死整個事情。 所以我知道有占位符或其他東西,但是找不到正確使用它們的方法。 怎么做?
您可以在后面使用:
(?<=AAA.*?)BBB.*$
這將確保AAA
優先於BBB
。 快速測試:
PS> 'BBB bbb AAA aaa BBB ccc' -replace 'AAA.*?BBB.*$'
BBB bbb
PS> 'BBB bbb AAA aaa BBB ccc' -replace '(?<=AAA.*)BBB.*$'
BBB bbb AAA aaa
嘗試這樣的東西
(?<=AAA.*?)BBB.*
(?<=AAA.*)
是斷言的外觀,.net可以無限制地處理它們,因此它應該對您有用。
另一個解決方案是
(AAA.*?)BBB.*
並替換為捕獲組1中的內容
我不知道C#實現這些功能的程度,但是您可以使用其中任何一個
正向后方查找匹配項,而不替換它http://www.regular-expressions.info/lookaround.html
或者您可以存儲(AAA。*)部分並將其插入替換中
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.