如果你只想要首字母缩写词,你可以使用类似:
text = "Pediatric stroke (PS) is a relatively rare disease, having an estimated incidence of 2.5–13/100,000/year [1–4], but remains one of the most common causes of death in childhood, with a mortality rate of 0.6/100,000 dead/year [5, 6]"
text.scan(/\b[A-Z]+\b/)
# => ["PS"]
匹配整个单词很重要,这正是\b 提供帮助的地方,因为它标记了单词边界。
问题是当您的文本包含单个独立的大写字母时:
text = "Pediatric stroke (PS) I U.S.A"
text.scan(/\b[A-Z]+\b/)
# => ["PS", "I", "U", "S", "A"]
此时,我们需要对正在搜索的文本内容有更多的智能和预知。问题是,单字母首字母缩写词是否有效?如果没有,那么稍作修改会有所帮助:
text.scan(/\b[A-Z]{2,}\b/)
# => ["PS"]
{2,} 在the Regexp documentation 中进行了解释,请阅读该内容以获取更多信息。
我只想要缩写类型“ (ACRONYM) ”,在这种情况下是 PS
通过您的描述很难说出您想要什么。首字母缩写词定义为:
首字母缩写词是用作单词的缩写,由短语或单词中的初始组件组成。通常这些组件是单个字母(如 NATO 或激光)或单词或名称的一部分(如比荷卢经济联盟)。
根据Wikipedia。根据该定义,小写、全部大写和混合大小写都是有效的。
如果,你的意思是你只想要括号内的全大写,那么你可以很容易地修改正则表达式来尊重它,但是你会在你可能遇到的其他首字母缩写词上失败,要么丢失你应该想要的首字母缩写词,要么捕获其他你应该忽略的。
text = "(PS) (CT/CAT scan)"
text.scan(/\([A-Z]+\)/) # => ["(PS)"]
text.scan(/\([A-Z]+\)/).map{ |s| s[1..-2] } # => ["PS"]
text.scan(/\(([A-Z]+)\)/) # => [["PS"]]
text.scan(/\(([A-Z]+)\)/).flatten # => ["PS"]
获取文本的方式多种多样,但这只会在您查看“List of medical abbreviations”和“Medical Acronyms / Abbreviations”时打开一个新的蠕虫罐。
通常我会有一张我会接受的表格,使用一个简单的模式来捕捉任何我想要的东西,检查它是否在表格中,然后保留或拒绝它。如何做到这一点由您自己弄清楚,因为这是一个完全不同的问题,不属于这个问题。