[英]Regular expression to match any word that contain specific letters or more?
我需要一個正則表達式來匹配包含字母的任何單詞: m+a+h+d以任何順序在一起,因此, Mohamed , Hamada和Mahmoud匹配,但錘子不匹配我嘗試執行以下操作(我是新手正則表達式!):
Regex reg=new Regex("[mahd]");
但顯然這不是正確的模式
當您想以任何順序匹配某些子字符串時,您可以使用交替來枚舉所有可能的變體,或者使用錨定前瞻。
在這種情況下,我建議使用正向前瞻,以確保單詞中字母的自由順序以及它們在匹配單詞中的強制性存在。
用
(?i)\b(?=\w*m)(?=\w*a)(?=\w*h)(?=\w*d)\w+
請參閱正則表達式演示(注意:您可以將\\w
替換為\\p{L}
以僅匹配字母)。
詳情:
(?i)
- 不區分大小寫模式\\b
- 前導詞邊界(?=\\w*m)
- 在 0+ 個單詞字符(即字母、數字或下划線)之后,必須有m
(?=\\w*a)
- 在 0+ 個字字符后,必須有a
(?=\\w*h)
- 在 0+ 字字符后,必須有h
(?=\\w*d)
- 在 0+ 字字符后,必須有d
\\w+
- 1 個或多個字母、數字或下划線(您可以用\\p{L}
替換以僅匹配字母)。var str = "Mohamed, Hamada and Mahmoud match, but not hammer";
var letters = "mahd";
var pat = string.Format(@"\b{0}\w+\b", string.Join("", letters.Select(s => string.Format(@"(?=\w*{0})", s))));
var result = Regex.Matches(str, pat, RegexOptions.IgnoreCase)
.Cast<Match>()
.Select(match => match.Value)
.ToList();
Console.WriteLine(String.Join("\n", result)); // Demo line
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.