首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我如何替换短语中的所有非单词,除了后面的数字或前面的字符?

我如何替换短语中的所有非单词,除了后面的数字或前面的字符?
EN

Stack Overflow用户
提问于 2013-11-12 21:31:02
回答 2查看 133关注 0票数 1

让我们来看看sentences的红宝石阵列。在数组中

  1. 只包含单词的句子
  2. 包含电话号码的句子
  3. 含有测量单位的数值的句子
    • 在这种情况下,我们可能会有这样的东西:1mL55mL1 mL等等。

  1. 包含以1x5 x表示的数量的句子。

我试图为gsubscan函数构造一个regexp,这样我就可以清理上面的sentences数组,只留下单词(1)、度量单位(3)和数量(4),但是清除所有非单词字符,例如电话号码(2)和任何其他分隔字符(如\t )。

到目前为止,我有这样的想法:

代码语言:javascript
复制
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个小时了,但都没有用。我想我可能完全误解了我的眼神,或者只是错过了一个关键时刻。

期待着雷杰普专家的参与!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-12 22:07:49

这也许是一个开端:

代码语言:javascript
复制
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.
票数 0
EN

Stack Overflow用户

发布于 2013-11-13 11:23:58

这适用于您的样本数据,但可能还有其他情况没有得到处理:

代码语言:javascript
复制
(?<!x\s?)\b[-.\d]+\b(?!\s*?ml)

正则表达式仅与示例数据中的415-123-4567匹配。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19940315

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档