正则表达式 - 精确提取6位数

时间:2011-03-16 13:42:50

标签: c# regex

Yoav - 编辑更清晰

您好, 我需要在文本文件中找到6位数字字符串。我在C#工作。 例如:

text text text123365 text text text

表达式必须跳过超过6的字符串:

text text text1233656 text text text

上述字符串不应返回任何结果,因为数字字符串的长度为7。

我想出了这个表达:[^0-9]([0-9]){6}[^0-9]

除了在行的开头或结尾处的字符串

外,它完美地运行
123365text text text text text text
text text text text text text123365

是否可以识别这些情况?

6 个答案:

答案 0 :(得分:6)

尝试:

(?<!\d)\d{6}(?!\d)

它说:

  • 查找6位数字,这些数字不是直接在数字
  • 之前或之后

它会在字符串中的任何位置显示。

示例:

  

123365文本文本文本文本文本文本   文本文本文本文本text123365

匹配

  1. 123365
  2. 123365
  3.   

    123365文本文本文本234098文本文本文本   文本文本文本文本567890 text123365

    匹配

    1. 123365
    2. 234098
    3. 567890
    4. 123365

答案 1 :(得分:6)

System.Text.RegularExpressions.Regex re = 
    new System.Text.RegularExpressions.Regex(@"(^|\D)(\d{6})($|\D)");

答案 2 :(得分:5)

我认为你最好使用负向前瞻和后视来做这个而不是边界或不匹配,比如:

(?<![0-9])[0-9]{6}(?![0-9])

答案 3 :(得分:0)

我即将提出与PatrikAkerstrand\b\d{6}\b)相同的建议。相反,我会发布一个指向a working example on Rubular的链接。

答案 4 :(得分:0)

试试这个:

(^|[^0-9])(?<num>[0-9]{6})[^0-9]

这似乎符合您的要求。我使用Regexdesigner

测试了它

答案 5 :(得分:-1)

我们需要匹配6个数字,在字符串中的任何位置(单行)。上述的这种变化最终为我们工作:

(^|\b)(\d{6})(\b|$)