正则表达式:r05c75 - 提取书挡之间的数字

时间:2011-01-11 17:17:29

标签: regex

今天,我正在学习正则表达式= D

我理解一些基础知识,例如\d+匹配任意数量的数字,但我如何获得字符串r05c75中'r'和'c'之后的值(数字是任意长度)

它们代表行和列值,我想提取'r'和'c'之间的数字以及'c'和$(字符串结尾)之间的数字。

我希望这个问题也可以解释为其他任何初学者。

一般情况是

aaa DDD bbb DDD ccc DDD (without spaces)

其中aaa,bbb,ccc和ddd是任意(已知)字符串,而D-triplets只是数字。

我可以“匹配”(检查有效性)我的字符串r05c75,但我不知道如何提取数字。

这可能是一个相当普遍的问题,如果我错过任何重复,我很抱歉。

4 个答案:

答案 0 :(得分:2)

(?:\w+(\d+))+是通用正则表达式,它只返回带有数字

的匹配组

(?: ... )语法表示“非捕获组”,它允许我说它可以重复(使用+)但不会显示在匹配组中。另一组(\d+)没有?:,因此会被捕获。

所以,请用英文阅读这个正则表达式,“匹配一个或多个一个或多个字母后跟一个或多个数字的组,哦,是的,捕获数字分组”。

答案 1 :(得分:0)

r(\d+)c

括号表示“捕获”的正则表达式概念......如果您搜索参考文档,他们应该告诉您更多相关信息。

答案 2 :(得分:0)

您可以使用parens提取值:

r(\d+)c(\d+)

这将为您提供$ 1中的行号和$ 2中的列号。

答案 3 :(得分:0)

通常,在使用正则表达式时,您可以将子表达式标记为一个组,并在成功匹配后检索该组内容。

在您的情况下,如果我们使用javascript正则表达式引擎,您可以将r95c75的匹配写为:

var match = "r05c75".match(/r(\d+)c(\d+)/);
if ( match ) // if successfull match
{
  var n1 = match[1];
  var n2 = match[2];
}

n1,n2将包含数字。