簡體   English   中英

正則表達式匹配包含特定字母或更多字母的任何單詞?

[英]Regular expression to match any word that contain specific letters or more?

我需要一個正則表達式來匹配包含字母的任何單詞: m+a+h+d以任何順序在一起,因此, MohamedHamadaMahmoud匹配,但錘子不匹配我嘗試執行以下操作(我是新手正則表達式!):

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}替換以僅匹配字母)。

C# 演示

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.

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