这不是很清楚自己想要什么,但在数字上分裂似乎是一种可以完成任何事情的可怜方法。
至少,您希望对每条记录进行更改和/或提取每条记录的信息,因此将数据拆分为记录要好得多。每个记录由一个空行分隔,所以我们可以使用
my @items = split /\n\n/, $info;
这给:
my @items = (
"8. 9 Run\n Keywords :- RUN;",
" 9. 10 spreadshee\n Keywords :- spreadsheet;",
" 10. 11 Book\n Keywords :- Book;",
" 11. 15 Hide\n Keywords :- Hide;",
" 12. 132 Pick\n Keywords :- Pick;",
);
现在看来要删除的号码。
s/^\s*\K\d+\.\s*// for @items; # Preserves the leading whitespace.
s/^\s*\d+\.\s*// for @items; # Removes the leading whitespace.
后者提供:
9 Run
Keywords :- RUN;
10 spreadshee
Keywords :- spreadsheet;
11 Book
Keywords :- Book;
15 Hide
Keywords :- Hide;
132 Pick
Keywords :- Pick;
如果不回答:
my @items = (
"9 Run\n Keywords :- RUN;",
"10 spreadshee\n Keywords :- spreadsheet;",
"11 Book\n Keywords :- Book;",
"15 Hide\n Keywords :- Hide;",
"132 Pick\n Keywords :- Pick;",
);
您可以通过使用
$info = join("\n\n", @items);
这给重建$info
减去号码你的问题,但要说明你期望从你的例子中得到什么输出。
'我@captures = $信息=〜m/^ \ s *(\ d + \。)/ mg;' – DavidO
我不确定 - 您是否要分割_by_'8.'(etc)?换句话说,你最终是否希望有'9 ...运行'(等),或者,'8'。 9. ......(等)? – zdim
你有什么试过的?最近这些帖子的得分很低,没有显示出执行的努力。有些语言文档向你展示了如何实现这种语言,这似乎更像是想让某人为你做你的工作。 – vol7ron