我有以下文件:
Question:What color is the sky?
Explanation:The sky reflects the ocean.
Question:Why did the chicken cross the road?
Explanation:He was hungry.
我想要获得的是("What color is the sky?", "Why did the chicken cross the road")
我试图使用perl正则表达式解析此文件,但没有运气。
我将文件的全部内容放在名为$file
的字符串中,这就是我正在尝试的内容
my @questions = ($file =~ /Question:(.*)\n/g);
但是这总是只返回整个$file
字符串给我。
答案 0 :(得分:0)
将整个文件放在一个值中会占用太多内存,如果它很大,更好的方法是逐行处理文件。
例如,您可以执行类似
的操作my @questions;
while (<>) {
chomp;
if (m/Question:(.*)/) {
push @questions, $1;
}
}
一些解释:
perlop
:
来自
<>
的输入来自标准输入,或来自命令行中列出的每个文件。
答案 1 :(得分:0)
你的(.*)
贪婪地匹配整行,直到它到达\n
,这可能是你获取字符串的结果。
您可以添加?
以使匹配不贪婪。
所以试试
my @questions = ($file =~ /Question:(.*?\?)/g);
注意我已转义\?
,因此正则表达式将匹配问号