正则表达式根据字符串长度提取字符

时间:2013-06-08 15:55:16

标签: regex string r postal-code

我想提取英国邮政编码的输出代码。所有背景都在这里:UK Postcode Regex (Comprehensive)

但它不是验证,所以这应该做:

  • 长度为5的邮政编码的前2个字符
  • 长度为6的邮政编码的前3个字符
  • 长度为7的邮政编码的前4个字符

所有邮政编码都转换为大写,没有空格。

我无法弄清楚如何指定动态范围。或者无论如何。

伪代码^[A-Z0-9]{length(postcode) - 3}

补充:我正在使用R。

1 个答案:

答案 0 :(得分:2)

您正在使用的语言或环境(或者更确切地说是正则表达式)会有所帮助(总是在任何正则表达式问题中),但在大多数情况下应该这样做:

^([A-Z0-9]{2,})[A-Z0-9]{3}$

因此我们在1组中匹配并capture 2个或更多字符,然后再需要3个字符,直到字符串结束。如何访问捕获取决于您的环境。

如果你的正则表达式支持lookaheads,你就可以在不使用捕获的情况下逃脱:

^[A-Z0-9]{2,}(?=[A-Z0-9]{3}$)

这可确保匹配的结尾后跟三个字符和字符串的结尾,但不会在匹配中包含此部分。