需要帮助的,对最低一个空间的边界

问题描述:

我想匹配CUSIP排名第九位的字母数字的正则表达式。我有以下,但它缺少一些边缘情况。需要帮助的,对最低一个空间的边界

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

我需要省略包含在中间的空间字符串,我需要它来搭配这可以通过一些其他的文本字符串接壤。我的琴弦一般由标签包围,但它可能是少一个空格字符与其他文本分离CUSIP。在此先感谢,我很绿色,正则表达式。附:我使用.NET的

“[TAB] 123456789 [TAB]” 应该匹配(我得到这个现在)

“sometext [TAB] 123456789 [TAB] sometext “应该匹配(目前暂不返回)

‘一些文本’不应该被返回(我目前得到这种比赛的)

+0

您所获得的“某些文字”类型是否包含9个字母的单词,如“字母”或“puppydogs”? – 2011-05-05 17:37:27

+1

你如何测试你的比赛?因为你的正则表达式看起来不错,我用在线正则表达式测试器(http://gskinner.com/RegExr/)检查它,并且它正确地匹配你的测试字符串 – 2011-05-05 17:37:43

+0

@Sean U他们可以,但是它们通常是带有内部空间的字符串。我正在使用http://regexpal.com/来检查比赛,他们被包括在内。 – kirps 2011-05-05 18:44:54

this page,不是任何9位数字是有效的CUSIP。前三个字符只能是数字,第九是校验所以,如果你想区别于其他9个字符的字符串CUSIPs,我相信这应该更好地工作:

\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(奇偶校验)字符验证字符串是有效的。

+0

这工作的魅力,谢谢! – kirps 2011-05-05 19:16:37

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 
+0

这也非常有帮助,但下面是一个答案,也表明我的问题可能会更好。再次感谢你的帮助! – kirps 2011-05-05 19:16:08

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

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

基于this documentthis document,所述CUSIPs具有以下规则:

  • 长度是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

+1

这很好,但是在这种情况下,这些解决方案中的任何一个都可能无法识别有效的cusip,所以通常省略校验位。在我的情况下,我只是简单地将校验数字设为可选的[^ [0-9] {3} [a-zA-Z0-9] {2} [a-zA-Z0-9 * @#] {3} [0 -9] $' – phosplait 2017-03-02 16:24:52