使用正则表达式查找包含数值的所有单词

本文关键字:单词 包含数 正则表达式 查找 | 更新日期: 2023-09-27 18:16:16

在我的Dot net应用程序中,我必须找到包含字母和数值的所有单词,我试图找到但未能找到适当的答案我有(?=.'d)'w+ regex,但它返回45作为有效的。下面是我的示例列表,其中粗体是正确的词,其他是错误的词

  • madan45
  • 45马丹
  • mad45an
  • 马丹
  • 45

我无法输入[a-zA-Z],因为我的文本可能包含英语以外的语言,例如:5000。

使用正则表达式查找包含数值的所有单词

(?:^|(?<='s))(?='S*'d)(?='S*(?!'s)'D)'S+(?='s|$)

试试这个。看到演示。

https://regex101.com/r/cJ6zQ3/15

^(?!('d+|[A-z]+)$)'w+$

('d+|[A-z]+)$:全字母或全数字。

(?!('d+|[A-z]+)$):Negative Lookahead -断言不可能匹配所有字母或数字。

(?:'d+[a-z]|[a-z]+'d)[a-z'd]*

这个Reg Ex应该可以满足你的需求。

包含字母和数值的所有单词

fail to find proper answer I have (?=.'d)'w+

你很接近了。超前查询应该匹配数字前的任何字元,以满足数字条件。然后,在主模式中,需要一个字母:

正则表达式:

(?='w*'d)'d*[A-Za-z]'w*
<<p> regex101演示/kbd>
  1. 超前
    • 'w* 任意文字字符:[A-Za-z0-9_]
    • 'd 需要1位。
  2. 主要模式
    • 'd* 字母前的任意数字。
    • [A-Za-z] 要求1个字母
    • 'w* 其余文字

这也可以:

string pattern = @"^(?='D*'d)(?='d*'D)'w+$";
检查:

var inputs = new List<string> { "madan45", "45madan", "mad45an", "Madan", "45" };
foreach (var str in inputs)
    Console.WriteLine($"{str} - {Regex.IsMatch(str, pattern)}");
输出:

//  madan45 - True
//  45madan - True
//  mad45an - True
//  Madan - False
//  45 - False