正则表达式中的算术运算

正则表达式中的算术运算

我正在使用 gedit 正则表达式插件(Python 风格的正则表达式)。我想对一组的反向引用进行一些算术运算。

例如:

PART 1 DATA MODELS Chapter  
2 Entity-Relationship Model 27

我想把它改成

PART 1 DATA MODELS Chapter  25
2 Entity-Relationship Model 27

我的正则表达式是^(PART.*)\n(.*\s(\d+))\n,我想将其替换为\1 \3-2\n\2\n.但替换正则表达式是不正确的。

答案1

我现在不关心 gedit,但在vim正则表达式中的算术运算很容易。例如:

:%s/\d\+/\=submatch(0)+25/g

找到每个整数并加上 25。

另请参阅这里类似问题的 Perl 解决方案。

答案2

我的理解是你想在每行的末尾添加'PART'下一行的最后一个数字减去 2。如果是这样,可以通过以下方式完成'awk'

awk '!/^PART/{print}/^PART/{
getline next_line;
match(next_line, "[^ ]*$");
print $0 " " substr(next_line, RSTART) - 2;
print next_line}' <your file>

此脚本运行的假设是输入文件的最后一行不是以 开头'PART',并且以 开头的行后面的行将'PART'在末尾包含一个空格和一个数字。如果需要,可以添加错误检查。

相关内容