我需要一个正则表达式来匹配任何包含字母的单词:m+a+h+d以任何顺序在一起
所以,Mohamed, Hamada and Mahmoud匹配,但是hammer不匹配
我尝试执行以下操作(我是正则表达式的新手!):
Regex reg=new Regex("[mahd]");
但显然这不是正确的模式
当您想要以任意顺序匹配某些子字符串时,您可以使用枚举所有可能变体的交替,或者使用锚定前瞻。
在这种情况下,我建议使用正向先行,以确保单词中字母的自由顺序以及它们在匹配的单词中的强制存在。
Use
(?i)\b(?=\w*m)(?=\w*a)(?=\w*h)(?=\w*d)\w+
See the (NOTE: 你可以更换\w
with \p{L}
只匹配letters).
Details:
-
(?i)
- 不区分大小写模式开启
-
\b
- 前导词边界
-
(?=\w*m)
- 0+ 个单词字符(即字母、数字或下划线)之后,必须有m
-
(?=\w*a)
- 0+个单词字符之后,必须有a
-
(?=\w*h)
- 0+个单词字符之后,必须有h
-
(?=\w*d)
- 0+个单词字符之后,必须有d
-
\w+
- 1个或多个字母、数字或下划线(您可以替换为\p{L}
只匹配letters).
C# demo http://ideone.com/8xUGPb:
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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)