Ruby 使用正则表达式从字符串中除去撇号以外的所有字符和标点符号
我试图让此方法调用:Ruby 使用正则表达式从字符串中除去撇号以外的所有字符和标点符号,ruby,regex,Ruby,Regex,我试图让此方法调用: alternate_words(". . . . don’t let this stop you") 在字符串中每隔一个单词返回一次,除了“之外,少一些标点符号 这是方法定义: def alternate_words(sentence) sentence.gsub(/[^a-z0-9\s']/i, "").split(" ").delete_if.with_index {|word,index| index.odd? } end 结果是: ["dont",
alternate_words(". . . . don’t let this stop you")
在字符串中每隔一个单词返回一次,除了“
之外,少一些标点符号
这是方法定义:
def alternate_words(sentence)
sentence.gsub(/[^a-z0-9\s']/i, "").split(" ").delete_if.with_index
{|word,index| index.odd? }
end
结果是:
["dont", "this", "you"]
返回正确的单词,但不包括“
。将正则表达式更改为:
/[^a-z0-9\s][']/i
返回
[".", ".", "don’t", "this", "you"]
现在,它正确地识别撇号,但它错误地包含句号。我不明白为什么。实际上,您可以将带撇号的单词和连字符与scan
匹配:
def alternate_words(sentence)
sentence.scan(/[[:alnum:]]+(?:[’'-][[:alnum:]]+)*/).delete_if.with_index { |_,index|
index.odd?
}
end
p alternate_words(". . . . . don’t let this stop you")
# => ["don’t", "this", "you"]
见
如果您只想匹配整个单词,则[[:alnum:]+(?:[''-][[:alnum:]]+])*
模式可以用单词边界-\b
-括起来
详细信息:
-1个或多个字母数字符号[[:alnum:]+
-零或更多(由于(?:[''-][[:alnum:][]+)*
,根据要求替换为另一个量词):*
-撇号或连字符(列表可能会调整_[''-]
-1个或多个字母数字符号[[:alnum:]+
scan
匹配:
def alternate_words(sentence)
sentence.scan(/[[:alnum:]]+(?:[’'-][[:alnum:]]+)*/).delete_if.with_index { |_,index|
index.odd?
}
end
p alternate_words(". . . . . don’t let this stop you")
# => ["don’t", "this", "you"]
见
如果您只想匹配整个单词,则[[:alnum:]+(?:[''-][[:alnum:]]+])*
模式可以用单词边界-\b
-括起来
详细信息:
-1个或多个字母数字符号[[:alnum:]+
-零或更多(由于(?:[''-][[:alnum:][]+)*
,根据要求替换为另一个量词):*
-撇号或连字符(列表可能会调整_[''-]
-1个或多个字母数字符号[[:alnum:]+
'''ʻ''
很容易相互误解。原始字符串中的内容看起来不像您在问题中提到的一个引号。'''ʻ'
很容易相互误解。