簡體   English   中英

如何找到所有帶有正則表達式的耦合支架?

[英]How to find all coupling bracket with regular expression?

我想要一個正則表達式來查找所有大括號並將其替換為其他字符串。

例如,我想用“ FOO ”替換“ {foo} ”,用“ BAR ”替換“ { bar} ”,用“ EMPTY ”替換“ {} ”。 如果輸入為“ abc {foo} def {bar} {} ”,則輸出為“ abc FOO def BAR EMPTY ”。

不允許使用嵌套括號或非耦合括號。 如果需要字符“ {”或“}”。 應該加倍。 因此,“ {{def}}”僅僅是“ {def}”。

不允許在{}中使用其他字符串。 說,我只想要“ {foo} ”和“ {bar} ”。 因此,應將“ abc {xyz} def ”識別為無效輸入。

如果您有否定的后顧之憂/前瞻功能:

(?<!{){([a-z]+)}(?!})

並替換為匹配組的值。

([az]+)匹配您包含的字符串, (?<!{)確保在{之前沒有第二個{ ,而(?!})確保在之后沒有第二個}您的}

如果您沒有后顧之憂,那么

(?^|[^{]){([a-z]+)}(?$|[^})

我首先要使用EMPTY替換{}而不使用正則表達式。

然后使用

(?<!{){(foo|bar)}(?!})

匹配{foo}{bar}但不匹配{foo} {}{{anything}}{anything}

反向編號 1包含匹配的文本。

因此,代碼段可能看起來像

Regex matches = new Regex(@"(?<!\{)\{(foo|bar)\}(?!\})", RegexOptions.IgnoreCase);
resultString = matches.Replace(subjectString, "$1".ToUpper());

(我希望在字符串上調用ToUpper()可以工作;我不知道C#,所以如果我錯了,請糾正我)

暫無
暫無

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

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