需要有关正则表达式的帮助,以获得最少一个空格边界的九位字母数字

时间:2011-05-05 17:28:01

标签: c# regex

我正在尝试匹配CUSIP号码。我有以下内容,但它缺少一些边缘情况。

\s[A-Za-z0-9]{9}\s

我需要省略在中间包含空格的字符串,我需要它来匹配可能与其他文本接壤的字符串。我的字符串通常被制表符包围,但它可能只有一个空格字符将CUSIP与其他文本分开。在此先感谢,我对正则表达式非常环保。附:我在.NET工作

实施例

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

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

不应该返回“某些文字”(我目前正在进行这种匹配)

4 个答案:

答案 0 :(得分:5)

根据this page,,不只是任何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)”:

(^|[^a-zA-Z0-9])[0-9]{3}[a-zA-Z0-9]{6}([^a-zA-Z0-9]|$)

我认为这应该是一个99%的解决方案,但是如果你想要非常强大,你可能还想研究使用第9个(奇偶校验)字符来验证字符串是否有效。

答案 1 :(得分:4)

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

基于this documentthis document,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]$

你可以玩它here

请注意,尽管没有深入细节,但这会使表达变成怪物,这是尽可能紧的。我建议你使用校验位算法来完全验证CUSIP,你可以找到here

答案 2 :(得分:2)

string haystack = "some 123456789 text";//single space separators

string haystack2 = "some\t123456789\ttext";//tab separators

// The comment is correct, your pattern was correct originally.  
// This is just slightly dressed up.
string pattern = @"(\s+)(?<cusip>[A-Za-z0-9]{9})(\s+)";

Match m = Regex.Match(haystack, pattern);

Console.WriteLine("Match for cusip surrounded by spaces:" + m.Groups["cusip"]);
//Output: Match for cusip surrounded by spaces:123456789

Match m2 = Regex.Match(haystack2, pattern);

Console.WriteLine("Match for cusip surrounded by tabs:" + m2.Groups["cusip"]);
//Output: Match for cusip surrounded by tabs:123456789

答案 3 :(得分:0)

    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;
    }