我在ruby中遇到一些正则表达式的麻烦。我需要对一些文件进行分类,这些文件的第一行后跟两个换行符,如下例所示:
GIOVIANA
Si scrivono miliardi di poesie
sulla terra ma in Giove è ben diverso.
Neppure una se ne scrive. E certo
la scienza dei gioviani è altra cosa.
Che cosa sia non si sa. È assodato
che la parola uomo lassù desta
ilarità.
空行可以出现在文件的其他位置以及双空行。我尝试了以下正则表达式(和许多其他人)
/\A.*\n\n/
但我没有得到理想的结果。
我也将解释我的整个项目,以防有人对如何做到更好。我需要在纯文本中自动标记文本结构。我可以用正则表达式很好地识别行,句子等等,但我无法告诉我的程序:
如果第一行后跟两个换行符,那么它就是一个磁贴,所以用标题标记标记它并继续第三行 如果第一行后面没有两个换行符,则诗歌没有标题,将第一行标记为标题,然后标记所有诗歌(包括第一行)
在第一种情况下,期望的结果是
[poem}[title}GIOVIANA{title]
[line}[sentence}Si scrivono miliardi di poesie{line]
[line}sulla terra ma in Giove è ben diverso.{sentence]{line]
[line}[sentence}Neppure una se ne scrive.{sentence][sentence} E certo{line]
[line}la scienza dei gioviani è altra cosa.{sentence]{line]
[line}[sentence}Che cosa sia non si sa.{sentence] [sentence}È assodato{line]
[line}che la parola uomo lassù desta{line]
[line}ilarità.{sentence]{line]
{poem]
在一首没有像
这样的标题的诗中Ora sia il tuo passo
più cauto: a un tiro di sasso
di qui ti si prepara
una più rara scena.
期望的结果是
[poem}[title}[line}[sentence}Ora sia il tuo passo{line]{title]
[line}più cauto: a un tiro di sasso{line]
[line}di qui ti si prepara{line]
[line}una più rara scena.{line]{sentence]{poem]
由于
答案 0 :(得分:1)
你不需要(复杂的)正则表达式,只需编写一个解析器:
lines = string.split("\r\n")
要么
lines = File.readlines(fname)
,
然后是这样的:
IN_SENTENCE=false
if lines[1] =~ /\w+/
puts "[poem}[title}[line}[sentence}#{lines[0].strip}{line]{title]"
IN_SENTENCE=true
start = 1
else
puts "[poem}[title}#{lines[0].strip}{title]"
start = 2
end
lines[start..lines.size].each do |line|
#process line
end