目标要找到一个完全匹配的单词,正好是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");
}
}
}
}
输出
答案 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"
使您无需逃避在表达式中使用的每个@