ご注文全体が20%オフ&送料無料(初めてのお客様のみ)!チェックアウト時にクーポンコードNEW20VISIONを入力します。期間限定のオファー。
このタイプの文字列をdbから取得しています。文字列に英数字の単語が含まれているかどうかを確認する必要があります。英数字の単語が含まれている場合は下線を付けます。上記の場合と同様に、NEW20VISIONです。
RaphaëlAlthausは正しいですが、無駄な一致を避けるために、パッシブグループをいくつか追加する方が良いと思います
テスト用の文字列:
Get 20% Off Your Entire Order & FREE Shipping (first55 time55 custo55mers only)! Enter coudf45pon code NEW20VISION at checkout. Limited time offer.
RaphaëlAlthausの正規表現:
\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ëlAlthausの正規表現の結果:
===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
次の正規表現を使用します /[a-zA-Z0-9]/
またはリンクを確認してください: http://www.dreamincode.net/code/snippet5818.htm
ええと、少し混乱があると思います。なぜなら、検索するのは英数字の単語 (「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);
これはどう:
Regex regexObj = new Regex(@"\w*(?:\d\p{L}|\p{L}\d)\w*");
これは、少なくとも 1 つの数字の後に文字が続く、またはその逆を含む英数字の単語に一致します。
唯一の「いぼ」は\w
、アンダースコアにも一致するものです。それを望まない場合は、もう少し醜くなります。
Regex regexObj = new Regex(@"[\d\p{L}]*(?:\d\p{L}|\p{L}\d)[\d\p{L}]*");