這不是很清楚自己想要什麼,但在數字上分裂似乎是一種可以完成任何事情的可憐方法。
至少,您希望對每條記錄進行更改和/或提取每條記錄的信息,因此將數據拆分爲記錄要好得多。每個記錄由一個空行分隔,所以我們可以使用
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