C# 需要九位字母数字正则表达式的帮助,至少有一个空格边界

C# 需要九位字母数字正则表达式的帮助,至少有一个空格边界,c#,regex,C#,Regex,我在试着匹配一个数字。我有以下内容,但它缺少一些边缘案例 \s[A-Za-z0-9]{9}\s 我需要省略包含中间的一个空格的字符串,我需要它来匹配可能被其他文本包围的字符串。我的字符串通常由制表符包围,但可能只有一个空格字符将CUSIP与其他文本分隔开。提前谢谢,我对正则表达式很熟悉。另外,我在.NET工作 范例 “[TAB]123456789[TAB]”应该匹配(我现在就知道了) “sometext[TAB]123456789[TAB]sometext”应匹配(当前未返回) “some t

我在试着匹配一个数字。我有以下内容,但它缺少一些边缘案例

\s[A-Za-z0-9]{9}\s
我需要省略包含中间的一个空格的字符串,我需要它来匹配可能被其他文本包围的字符串。我的字符串通常由制表符包围,但可能只有一个空格字符将CUSIP与其他文本分隔开。提前谢谢,我对正则表达式很熟悉。另外,我在.NET工作

范例

“[TAB]123456789[TAB]”应该匹配(我现在就知道了)

“sometext[TAB]123456789[TAB]sometext”应匹配(当前未返回)

“some text”不应返回(我目前正在获得这种匹配)

string haystack=“some 123456789 text”//单空间分离器
字符串haystack2=“some\t123456789\ttext”//制表符分隔符
//注释是正确的,您的模式最初是正确的。
//这只是稍微打扮一下。
字符串模式=@“(\s+)([A-Za-z0-9]{9})(\s+);
Match m=Regex.Match(草堆,模式);
Console.WriteLine(“匹配由空格包围的cusip:+m.Groups[“cusip”]);
//输出:匹配由空格包围的cusip:123456789
匹配m2=正则表达式匹配(haystack2,模式);
Console.WriteLine(“与被制表符包围的cusip匹配:“+m2.Groups[“cusip”]”);
//输出:匹配由制表符包围的cusip:123456789
据了解,不仅任何9位字母数字都是有效的CUSIP。前三个字符只能是数字,第九个是校验和,因此,如果您想将CUSIP与其他9个字符的字符串区分开来,我认为这应该更有效:

\s[0-9]{3}[a-zA-Z0-9]{6}\s
或者,如果还希望匹配以输入的开头或结尾为边框的字符串:

(^|\s)[0-9]{3}[a-zA-Z0-9]{6}(\s|$)
或者,如果您还希望匹配以标点符号为边框的字符串(例如“(100ABCDEF)”:


我相信这应该是一个99%的解决方案,但是如果你想变得真正健壮,你可能还想考虑使用第9个(奇偶校验)字符来验证字符串是否有效。

其他答案是错误的,不考虑PPN,并允许检查数字为字母。因此,这里有一个更好的解决方案

    public Boolean CusipValidation(string sCusip)
    {
        string Cusippattern = @"^([0-9]){3}([a-zA-Z0-9]){6}$";

        if (!System.Text.RegularExpressions.Regex.IsMatch(sCusip, Cusippattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase) && sCusip != string.Empty)
            return false;
        else
            return true;
    }
基于和,CUSIP具有以下规则:

  • 长度为9个字符
  • 字符1、2、3是数字
  • 字符4、5、6、7、8是字母或数字
  • 字符6、7、8也可以是*@#
  • 字符9是一个支票数字
考虑到这一点,以下正则表达式应该提供紧密匹配:

^[0-9]{3}[a-zA-Z0-9]{2}[a-zA-Z0-9*@#]{3}[0-9]$
你可以玩玩它


请注意,这是尽可能紧密的,不会涉及太多细节,这会使表达式变成怪物。我建议您使用检查数字算法来完全验证CUSIP,您可以找到它。

执行“一些文本”你得到的类型匹配包括9个字母的单词,如“字母表”或“puppydogs”?你如何测试你的匹配?因为你的正则表达式看起来不错,我用在线正则表达式测试仪()检查了它它与您的测试字符串匹配correctly@SeanU它们可以,但它们通常是带内部空格的字符串。我用它检查匹配,它们被包括在内。RegExr踢了regexpal的屁股,顺便说一句,谢谢。这也很有帮助,但下面的答案也说明了我的问题本可以更好。T再次感谢您的帮助!这很好,但通常会忽略校验位,在这种情况下,这些解决方案中的任何一个都可能无法识别有效的cusip。在我的情况下,我只是将校验位设置为可选的
^[0-9]{3}[a-zA-Z0-9]{2}[a-zA-Z0-9*.[\35;]{3}[0-9]$
    public Boolean CusipValidation(string sCusip)
    {
        string Cusippattern = @"^([0-9]){3}([a-zA-Z0-9]){6}$";

        if (!System.Text.RegularExpressions.Regex.IsMatch(sCusip, Cusippattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase) && sCusip != string.Empty)
            return false;
        else
            return true;
    }
^[0-9]{3}[a-zA-Z0-9]{2}[a-zA-Z0-9*@#]{3}[0-9]$