Ruby中的正则表达式

时间:2011-05-05 15:27:59

标签: ruby regex

我有一个外部文本文件,如下所示:

This_ART is_P an_ART example_N.
Thus_KONJ this_ART is_P a_ART part_N of_PREP it_N.

现在我想在Ruby中打开这个文件并使用每个带注释的单词创建一个数组。我的尝试看起来像这样:

def get_entries(file)
  return File.open(file).map { |x| x.split(/\W+_[A-Z]+/) }
end

但执行只返回一个数组,每个句子都是成员:

[["This_ART is_P an_ART example_N.\n"],["Thus_KONJ this_ART is_P a_ART part_N of PREP it_N.\n"]]

包括标点符号和转义字符。错误在哪里或者我需要更改什么来获得正确的数组?

2 个答案:

答案 0 :(得分:1)

尝试扫描你想要的那些,例如

return File.read(file).scan(/\w+_[A-Z]+/)

会给你类似的东西:

["This_ART", "is_P", "an_ART", "example_N", "Thus_KONJ", ...]

如果您希望删除注释部分,可以使用:

.map{ |w| w.gsub(/_[A-Z]+\z/, '') }

请注意\ w是单词字符,\ W是非单词字符

答案 1 :(得分:0)

/\W+_[A-Z]+/

仅在_之前存在非单词字符时匹配,而在字符串中不是这样。

我不确切地知道你期待什么,但试试这个:

/_[A-Z]+\W*/

沿着这个正则表达式分裂给你

["This", "is", "an", "example", "Thus", "this", "is", "a", "part", "of", "it"]