C# 如何使用正则表达式从字符串中查找字母数字单词?

C# 如何使用正则表达式从字符串中查找字母数字单词?,c#,asp.net,regex,C#,Asp.net,Regex,享受整个订单的20%折扣和免费送货(仅限首次客户)!在结账时输入优惠券代码NEW20VISION。限时优惠 我正在从db获取这种类型的字符串。我必须找出字符串中是否有字母数字单词。如果它包含字母数字单词,我在它下面加下划线。就像上面的例子一样:NEW20VISION使用以下正则表达式 /[a-zA-Z0-9]/ 或者查看链接:嗯,我觉得有点混乱,因为你搜索字母和数字单词(“20”、“20ab”、“test”被认为是字母数字) 这个应该可以工作(可以简化,我很确定…) 使用Regex.Replac

享受整个订单的20%折扣和免费送货(仅限首次客户)!在结账时输入优惠券代码NEW20VISION。限时优惠

我正在从db获取这种类型的字符串。我必须找出字符串中是否有字母数字单词。如果它包含字母数字单词,我在它下面加下划线。就像上面的例子一样:NEW20VISION

使用以下正则表达式 /[a-zA-Z0-9]/


或者查看链接:

嗯,我觉得有点混乱,因为你搜索字母和数字单词(“20”、“20ab”、“test”被认为是字母数字)

这个应该可以工作(可以简化,我很确定…)

使用Regex.Replace进行测试,NEW20VISION已超出您的范围

 var regex = @"\b[a-zA-Z\d]*(([a-zA-Z]+\d+)|(\d+[a-zA-Z+]))[a-zA-Z\d]*\b";
 var text = "Get 20% Off Your Entire Order & FREE Shipping (first time customers only)! Enter coupon code NEW20VISION at checkout. Limited time offer.";

 var text2 = "20 test 1020test test2010, test10 20";


 var t2 = Regex.Replace(text, regex, string.Empty); 
 var t3 = Regex.Replace(text2, regex, string.Empty);

Raphaël Althaus是对的,但我认为最好为它添加几个被动组,以避免得到无用的匹配

用于测试的字符串:

Get 20% Off Your Entire Order & FREE Shipping (first55 time55 custo55mers only)! Enter coudf45pon code NEW20VISION at checkout. Limited time offer.
拉法埃尔·阿尔特豪斯的正则表达式:

\b[a-zA-Z\d]*(([a-zA-Z]+\d+)|(\d+[a-zA-Z+]))[a-zA-Z\d]*\b
我的正则表达式:

\b[a-zA-Z\d]*(?:(?:[a-zA-Z]+\d+)|(?:\d+[a-zA-Z+]))[a-zA-Z\d]*\b
Raphaël Althaus的正则表达式结果:

 ===next match===
Group[0]: first55
Group[1]: t55
Group[2]: t55
Group[3]: 
===next match===
Group[0]: time55
Group[1]: e55
Group[2]: e55
Group[3]: 
===next match===
Group[0]: custo55mers
Group[1]: 5m
Group[2]: 
Group[3]: 5m
===next match===
Group[0]: coudf45pon
Group[1]: 5p
Group[2]: 
Group[3]: 5p
===next match===
Group[0]: NEW20VISION
Group[1]: 0V
Group[2]: 
Group[3]: 0V
我的正则表达式的结果:

 ===next match===
    Group[0]: first55
    ===next match===
    Group[0]: time55
    ===next match===
    Group[0]: custo55mers
    ===next match===
    Group[0]: coudf45pon
    ===next match===
    Group[0]: NEW20VISION
这个怎么样:

Regex regexObj = new Regex(@"\w*(?:\d\p{L}|\p{L}\d)\w*");
这与至少包含一个数字后跟一个字母的字母数字字相匹配,反之亦然

唯一的“缺点”是
\w
也与下划线匹配。如果你不想这样,它会变得更丑陋:

Regex regexObj = new Regex(@"[\d\p{L}]*(?:\d\p{L}|\p{L}\d)[\d\p{L}]*");

正则表达式匹配一个单词,其中至少有一个数字,基本上是3种模式。。。以数字开头,后跟字母或数字。。。以字母或数字开头,然后是数字,然后是更多的字母或数字。。。最后是以数字结尾的字母或数字。试着把它写成一个正则表达式捕获,看看它是如何进行的。但是,是的,我同意Raph“你试过什么?”好的,但我也试过“^[a-zA-Z0-9]*$”但没有结果。你试过我的正则表达式和被动组吗?这不会检查字符串中是否至少有一个字母和一个数字。