VJ Reddy
Решение 1 дано по формуле Рдбурмон очень хороший.
В качестве альтернативы для поиска буквенно-цифровых слов можно использовать следующее регулярное выражение. Сначала он ищет слово с 2 или более буквенно-цифровыми символами, затем проверяет, присутствует ли в искомом слове хотя бы одна цифра и хотя бы один символ, и только в этом случае слово будет захвачено как группа.
В дальнейшем захваченная группа может быть использована для замены. Например. каждое из захваченных слов может быть заключено в <u> и </u>, как показано ниже:
То Regular Expression
можно протестировать здесь http://regexhero.net/tester/[^]
string inputText = @"Get 20% Off Your Entire Order & FREE Shipping " +
@"(first time customers only)! Enter coupon code NEW20VISION at checkout." +
@"Limited time offer. NEW20 20VISION New20New20New20Ne20 N2";
MatchCollection alphaNumMatches = Regex.Matches(inputText,
@"(?=\w{2,})(?=\w*\d+)(?=\w*\p{L}+)(\w{2,})",
RegexOptions.CultureInvariant | RegexOptions.IgnoreCase);
foreach(Match match in alphaNumMatches){
if (match.Groups.Count > 0)
Console.WriteLine (match.Groups[1].Value);
}
string replacedText = Regex.Replace(inputText,
@"(?=\w{2,})(?=\w*\d+)(?=\w*\p{L}+)(\w{2,})",
@"<u>$1</u>");
Console.WriteLine (replacedText);
//Output
//NEW20VISION
//NEW20
//20VISION
//New20New20New20Ne20
//N2
//Get 20% Off Your Entire Order & FREE Shipping (first time customers only)! Enter coupon code <u>NEW20VISION</u> at checkout.Limited time offer. <u>NEW20</u> <u>20VISION</u> <u>New20New20New20Ne20</u> <u>N2</u>
VJ Reddy
Это правда. Но он проверяет, чтобы увидеть, что по крайней мере одна цифра есть в искомом слове, но не гарантирует, что по крайней мере один алфавит есть в поиске. Например, этот шаблон соответствует 20 в приведенном выше тексте, в то время как ОП хочет, чтобы слово содержало по крайней мере одну цифру и по крайней мере один алфавит, как я понимаю из слова буквенно-цифровой. Вот тут-то и возникает проблема.
Это интересно. Узор короткий. Если его можно изменить, чтобы дать хотя бы один алфавит и одну цифру в матче, то я думаю, что это будет хорошо.
Спасибо.