我有一個關于使用正則運算式使用星號將字串中的文本加粗的問題。
關于這個主題的其他問題適用于簡單的場景,但是我們遇到了一些問題。
我們的特殊場景是用<bold></bold>標簽替換星號。它還必須能夠處理多個星號以及奇數個星號。
我們的示例輸入文本如下;
string exampleText1 = "**** PLEASE NOTE *** Testing, *nuts*, **please note..., test";
string exampleText2 = "**Test text (10)";
我們當前的正則運算式如下;
Regex _boldRegex = new Regex(@"(\*) ([^*?$] ) (\*)");
string value = _boldRegex.Replace(exampleText1, @"<bold>$2</bold>");
示例 1 應顯示"<bold> PLEASE NOTE </bold> Testing, <bold>nuts</bold>, *please note..., test"星號組被視為單個星號并忽略未完成標記的位置。
示例 2 使程式崩潰,因為它需要一個“結束”星號。它應該顯示"*Text text (10)"
任何人都可以通過建議一個新的正則運算式來提供幫助,同時記住處理星號組和奇數星號的能力?
提前致謝。
uj5u.com熱心網友回復:
對于示例資料,您可以使用帶有捕獲組的可選部分來捕獲重復的字符類,而在 1 個或多個之間沒有換行符 *
在replace的回呼中,可以測驗group 1是否存在,并以此為基礎進行替換。
\* (?:([^*?$\n\r] )\* )?
模式匹配:
\*匹配 1 次*(?:非捕獲組(捕獲組 1[^*?$\n\r]匹配 1 次除字符類中列出的字符之外的任何字符
)關閉第 1 組\*匹配 1 次*
)?關閉捕獲組
請參閱正則運算式演示。
例如
Regex _boldRegex = new Regex(@"\* (?:([^*?$\n\r] )\* )?");
string exampleText1 = @"**** PLEASE NOTE *** Testing, *nuts*, **please note..., test
**Test text (10)";
string value = _boldRegex.Replace(exampleText1, m =>
m.Groups[1].Success ? String.Format("<bold>{0}</bold>", m.Groups[1].Value) : "*"
);
Console.WriteLine(value);
輸出
<bold> PLEASE NOTE </bold> Testing, <bold>nuts</bold>, *please note..., test
*Test text (10)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/354298.html
上一篇:正則運算式洗掉多個空格后的字符
下一篇:空白字串的正則運算式
