正则表达式匹配精确的序列和长度

时间:2018-05-12 00:03:05

标签: c# regex

目标要找到一个完全匹配的单词,正好是7个字符,从3个字母后跟一个句子中的4个数字开始。

有效输入: ABC1234,MOW0912,qbc1239

我尝试使用

设置长度
var result = Regex.Match(myString, "[A-Za-z]{3}[0-9]{4}\\d{9}");

我已经提到了几个类似的帖子,并没有帮助我解决问题

https://laravel.com/docs/5.6/eloquent-mutators#defining-an-accessor

代码:我到目前为止

using System;
using System.Text.RegularExpressions;

public class Test
{
   public static void Main()
   {
      string[] data = { "This, is a test ,* P.O ABC12 and ABCDE5134 this is some random words UserID ABC1234 that the users may have, regards, and the end of it" };



      foreach (string myString in data)
      {
         if (Regex.IsMatch(myString, "[A-Za-z]{3}[0-9]{4}"))
         {
            var result = Regex.Match(myString, "[A-Za-z]{3}[0-9]{4}");
            Console.WriteLine("{0} matches", myString);
            Console.WriteLine("result is" + result);
         }
         else
         {
            Console.WriteLine("does not match");
         }
      }
   }
}

输出

C# Regular Expression Help Needed

2 个答案:

答案 0 :(得分:2)

在你的问题的实际状态,你不能。除非您有一些约束条件,否则您可以将搜索范围限制为您需要查找的内容。

ABCDE5134将始终匹配为3个字母/ 4位数匹配(产生BCDE5134),因为扫描了字符串并找到了条件。

如果您希望ABC1234作为结果,您将不得不使用它周围的空格作为匹配条件(因此必须匹配“ABC1234”)。

这将是正则表达式:

  

\ S [A-ZA-Z] {3} [0-9] {4} \ S

只要任何单词被空格括起来,就应该这样做。

注意你需要的单词是否以点或标点符号结尾。

在这种情况下,您还必须考虑这些(或删除最终的\,或替换为。)

所以正则表达式的“puctuation tolerant”版本将是:

  

\ S [A-ZA-Z] {3} [0-9] {4}

答案 1 :(得分:1)

如果我理解正确,你想要的是print_members之前和之后的字边界。如果在字符串的开头或结尾有匹配项,或者在它之前或之后有标点符号(你不想要的话),那么将它包装在空格字符("[A-Za-z]{3}[0-9]{4}")中将无法工作以\s结尾,因为它匹配.之类的字符串。

试试这个:

abc12345

@"\b[A-Za-z]{3}[0-9]{4}\b"使您无需逃避在表达式中使用的每个@