簡體   English   中英

正則表達式替換為占位符

[英]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.

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