Ruby 放弃字符串的收缩

Ruby 放弃字符串的收缩,ruby,regex,string,Ruby,Regex,String,我有一个特殊的用例,我想放弃字符串中的所有缩略语,只选择后跟字母的单词,这些字母不包含任何特殊字符 例如: string = "~ ASAP ASCII Achilles Ada Stackoverflow James I'd I'll I'm I've" string.scan(/\b[A-z][a-z]+\b/) #=> ["Achilles", "Ada", "Stackoverflow", "James", "ll", "ve"] 注意:这并不是放弃“我会”和“我已经”这个词

我有一个特殊的用例,我想放弃字符串中的所有缩略语,只选择后跟字母的单词,这些字母不包含任何特殊字符

例如:

string = "~ ASAP ASCII Achilles Ada Stackoverflow James I'd I'll I'm I've"
string.scan(/\b[A-z][a-z]+\b/)

#=> ["Achilles", "Ada", "Stackoverflow", "James", "ll", "ve"] 
注意:这并不是放弃“我会”和“我已经”这个词

有人能帮我去掉包含缩略语的整个单词吗?

试试这个正则表达式:

(?:(?<=\s)|(?<=^))[a-zA-Z]+(?=\s|$)

这里添加的唯一内容是?=\S*[a-z],这意味着必须至少有一个小写字母

我知道已经有一个可接受的答案,但我想给出我自己的答案:

(?<=\s|^)\w+[a-z]\w*
你可以测试一下。与公认答案中的315步相比,这个正则表达式缩短了157步,效率更高

解释相当简单:


?谢谢@Gurman,如果我还想丢弃整个大写的单词呢?例如:ASAP、MIT、IIT等…\A和\z分别是字符串的开头和结尾。不是^和$,分别是行的开始和结束。@SagarPandya您是对的。我已经更正了声明。有什么理由使用?哦,好的。。另一种解决方案是?\b是单词边界,它意味着从单词字符字母、数字、下划线转换为不在上一个列表中的非单词字符,反之亦然。撇号在单词的中间与两边都匹配。
(?<=\s|^)\w+[a-z]\w*