亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

正則表達式查找字符串并替換它或根據條件添加額外字符

正則表達式查找字符串并替換它或根據條件添加額外字符

慕虎7371278 2022-10-07 17:57:40
我有一個字符串,當一個字符串以我想用括號括起來{{m|gem-pro|*karzijan?||to turn}}的字符串開頭{{m和結尾時,前面的字符串}}to turn()}}細繩: {{m|gem-pro|*karzijan?||to turn}}必需的字符串: {{m|gem-pro|*karzijan?||(to turn)}}字符串不僅可以是to turn任何字符串。
查看完整描述

3 回答

?
肥皂起泡泡

TA貢獻1829條經驗 獲得超6個贊

您可以使用 2 個具有正向前瞻性的捕獲組:

({{m(?:\|[^\|]+)*\|\|)([^}]+)(?=}})

在 Java 中

String regex = "(\\{\\{m(?:\\|[^\\|]+)*\\|\\|)([^\\}]+)(?=\\}})";

關于圖案

  • (捕獲組 1

    • {{m從字面上匹配

    • (?:\|[^\|]+)*重復 0+ 次匹配|,然后不匹配|

    • \|\|匹配 ||

  • )關閉組 1

  • (捕獲組 2

    • [^}]+匹配 1+ 次不 }

  • )關閉組 2

  • (?=}})正向前瞻,斷言右邊是 }}

模式演示

在替換中,使用 2 個捕獲組:

$1($2)

例如在 C# 中:

string pattern = @"({{m(?:\|[^\|]+)*\|\|)([^}]+)(?=}})";

string input = @"{{m|gem-pro|*karzijan?||to turn}}";

Console.WriteLine(Regex.Replace(input, pattern, @"$1($2)"));


查看完整回答
反對 回復 2022-10-07
?
RISEBY

TA貢獻1856條經驗 獲得超5個贊

您可以嘗試使用此正則表達式:

{{m(.+)\|\|(.+)}}

這個替換模式:

{{m\1||(\2)}}

工作示例https ://regex101.com/r/3inQ3p/1


查看完整回答
反對 回復 2022-10-07
?
慕少森

TA貢獻2019條經驗 獲得超9個贊

您可以使用以下正則表達式:

(\{\{m\|[^}]*\|)([^|}]*)(\}\})

和替換:

\1(\2)\3

輸入:

{{m|gem-pro|*karzijan?||to turn}}

{{m|gem-pro|*karzijan?||abc}}

{{m|gem-pro|*karzijan?||to turn}},{{m|ine-pro|*gers-||to bend, turn}}

{{do nothing}}

#do nothing

輸出:


{{m|gem-pro|*karzijan?||(to turn)}}

{{m|gem-pro|*karzijan?||(abc)}}

{{m|gem-pro|*karzijan?||(to turn)}},{{m|ine-pro|*gers-||(to bend, turn)}}

{{do nothing}}

#do nothing

演示: https ://regex101.com/r/yoo9KG/2/

說明:

  • (\{\{m\|[^}]*\|)將捕獲{{m以 0 到 N 字符開頭的字符串,}直到到達 a |,即位于您的{{m...|...|..}}結構中的最后一個字符。捕獲組可以通過反向引用\1

  • ([^|}]*)將匹配結構中的最后一個字符串并將其存儲在第二個捕獲組中。

  • (\}\})將捕獲最后 2 個}并將其存儲在第 3 組中。

  • 您在替換中使用了 3 個反向引用,并用括號括住第二個以達到您的結果。

爪哇代碼:

String input = "{{m|gem-pro|*karzijan?||to turn}},{{m|ine-pro|*gers-||to bend, turn}}";

String output = input.replaceAll("(\\{\\{m\\|[^}]*\\|)([^|}]*)(\\}\\})", "$1($2)$3");

System.out.println(output);

輸出:


{{m|gem-pro|*karzijan?||(to turn)}},{{m|ine-pro|*gers-||(to bend, turn)}}


查看完整回答
反對 回復 2022-10-07
  • 3 回答
  • 0 關注
  • 148 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號