让我们来看看sentences的红宝石阵列。在数组中
1mL、55mL、1 mL等等。
1x或5 x表示的数量的句子。我试图为gsub或scan函数构造一个regexp,这样我就可以清理上面的sentences数组,只留下单词(1)、度量单位(3)和数量(4),但是清除所有非单词字符,例如电话号码(2)和任何其他分隔字符(如\t )。
到目前为止,我有这样的想法:
sentences.map do |sentence|
sentence.gsub!(/(?:(\d+)(?:[xX])|([xX])(?:\d+)[^a-zA-Z ])/, "")
end不幸的是,这正好取代了我想要取代的东西。而且,它不考虑测量单位是我想要保存的情况。
示例输入和输出:
输入: Lavender top (6 mL size preferred)
输出: Lavender top (6 mL size preferred)
输入: Blood & bone marrow aspirate: 15 mL centrifuge tube with transport media. Available from Cytogenetics, 415-123-4567.
输出: Blood & bone marrow aspirate: 15 mL centrifuge tube with transport media. Available from Cytogenetics, .
输入: Gold top x1, Lt. Green top x 1, Lavender top x1
输出: Gold top x1, Lt. Green top x 1, Lavender top x1
因此,可以有效地替换数字和其他非alpha字符,但只有在数字不表示度量或数量的情况下才有效。
我已经玩了3个小时了,但都没有用。我想我可能完全误解了我的眼神,或者只是错过了一个关键时刻。
期待着雷杰普专家的参与!
发布于 2013-11-12 22:07:49
这也许是一个开端:
input.map!{|x| x.gsub(/(?<!x\s|x)[\d-]+(?!\s?\w\w?)/i, '')}
#/(?<!x\s|x)[\d-]+(?!\s?\w\w)/i
# (?<!x\s|x) Dont match if after an x or x+space
# [\d-]+ Match digits (and other junk)
# (?!\s?\w\w) Make sure it is not followed by a two letter word. Here you could be more specific if it causes trouble.
# /expression/i make the thing case insensitive.发布于 2013-11-13 11:23:58
这适用于您的样本数据,但可能还有其他情况没有得到处理:
(?<!x\s?)\b[-.\d]+\b(?!\s*?ml)正则表达式仅与示例数据中的415-123-4567匹配。
https://stackoverflow.com/questions/19940315
复制相似问题