描述
该表达式将:
- 查找 2013 年
- 捕获第 n 个位置的列标题
- 捕获下一行第 n 个位置的值
请注意,要设置第 n 个位置,您需要将两个指示的数字都更改为所需的 n 值。此处显示的表达式将捕获第三个位置。
^\s*2013[^\r\n]*[\r\n]+(?:\s+([a-z]+)(?=[\r\n\s]|\Z)){3}[^\r\n]*?[\r\n]+(?:[^\r\n0-9,.]+([0-9,.]+)(?=[\r\n\s]|\Z)){3}
^ ^
| |
这是因为通过重复捕获组 n 次,正则表达式引擎只记住最后一次成功的匹配。在您的例程中,您只需测试返回的数组以查看第二个捕获是否有值,然后使用它
例子
显示示例文本中不存在的第四个位置的实时示例,因此匹配失败:http ://www.rubular.com/r/GUw7yLfLrQ
显示成功找到的 3 个位置的实时示例:http ://www.rubular.com/r/h8Y9fKK33c
示例文本
2013
Jan Feb March April May June
34,101.2 12,342.7 12,451.5
Value
代码
您没有指定语言,所以我在这里使用 PHP 来简单地展示表达式的工作原理
<?php
$sourcestring="your source string";
preg_match('/^\s*2013[^\r\n]*[\r\n]+(?:\s+([a-z]+)(?=[\r\n\s]|\Z)){3}[^\r\n]*?[\r\n]+(?:[^\r\n0-9,.]+([0-9,.]+)(?=[\r\n\s]|\Z)){3}/imsx',$sourcestring,$matches);
echo "<pre>".print_r($matches,true);
?>
火柴
[0] => 2013
Jan Feb March April May June
34,101.2 12,342.7 12,451.5
[1] => March
[2] => 12,451.5