我想捕獲一個字串的開頭,但忽略一個可選的后綴View。
可能的輸入:
Shell
ShellView
Console
ConsoleView
預期產出:
Shell
Shell
Console
Console
這個運算式顯然是錯誤的,問號使得一切都被第一組捕獲:
(\w )(View)?
如果我使用類似的運算式(Shell)(View)?確實有效,但僅適用于以 開頭的字串,Shell當然沒有別的了。
題:
這種正則運算式模式應該如何撰寫?
uj5u.com熱心網友回復:
您可以使用
^(\w ?)(?:View)?$
請參閱正則運算式演示。詳情:
^- 字串的開始(\w ?)- 第 1 組:任何一個或多個單詞字符,盡可能少(?:View)?- 一個可選的非捕獲組匹配一個View字符序列一次或零次$- 字串結束。
查看C# 演示:
var texts = new List<string> { "Shell", "ShellView", "Console", "ConsoleView" };
var rx = new Regex(@"^(\w ?)(View)?$");
foreach (var text in texts)
{
var match = rx.Match(text)?.Groups[1].Value;
Console.WriteLine(match);
}
輸出:
Shell
Shell
Console
Console
uj5u.com熱心網友回復:
這是另一種方法,它似乎很快(98 步)。
^\w ?(?=View$|$)
這是在線演示。
^: 字串的開始\w ?:匹配任何單詞字符一次到無限次,盡可能少。(?=): 正面展望。View$: 匹配View字串的末尾|: 要么$: 字串結束
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/444969.html
上一篇:正則運算式:僅允許大寫和特定數字
下一篇:正則運算式-捕獲組內的組
