正则表达式匹配六个空格,后跟最多31个字母数字

时间:2009-07-17 15:43:24

标签: regex

它正在走向一天结束,这让我感到烦恼 - 有一天我会找到正确学习正则表达式的时间,因为我知道从文本中提取信息可以节省大量时间。

我需要匹配符合以下签名的字符串:

6个空格后跟31个字母数字(或空格),然后该行不再包含字母数字文本。

E.g。

'      sampleheading                                                  ' - is fine 
'      sampleheading                                      10^21/1     ' - should not match 
'      sampleheading                                      sample      ' - should not match

我认为^(\s{6}[\w\s]{1,31})正确地匹配了第一位但我似乎无法选择仅在初始匹配后没有任何文本的行。

任何帮助表示赞赏!

编辑:

我已经更新了一些文本,因为你注意到我匆忙输入的原始样本实际上都已经过测试了。

5 个答案:

答案 0 :(得分:1)

您可以使用$来指示行的结尾,使用\s*在末尾允许可选的空格。

^\s{6}[\w\s]{1,31}\s*$

然而,您的样本与您所说的不符。它们只以四个空格开头,而不是六个空格,在最后一个样本中,“sampleheading sample”  在31个字符的限制范围内,所以它也匹配。 (中间样本也在长度范围内,但其中包含非单词字符,因此它不匹配)。这就是你想要的吗?

答案 1 :(得分:1)

使用$匹配行尾:

^(\s{6}[\w\s]{1,31})$

或者,如果您之后仍有空格要忽略:

^(\s{6}[\w\s]{1,31})\s*$

答案 2 :(得分:0)

添加一个$以匹配该行的结尾,例如

^(\s{6}[\w\s]{1,31})$

答案 3 :(得分:0)

难道你不是简单地说'匹配6个空格后跟31个字母数字'吗?那里没有“没有更多的字母数字”的概念

我认为到目前为止你所拥有的是好的(!),但你需要跟着(比如说)[^ \ w] - 即“不是字母数字”。

答案 4 :(得分:0)

试试这个:

^\s{6}[\w\s]{1,31}\W.*$