如何在Ruby中实现按每隔一个英文句号分割字符串?
Ruby按每隔一个英文句号分割字符串
当然可行,你可以通过正则表达式结合Ruby的字符串方法来实现这个需求,下面给你两种实用的实现方式:
方法一:用split配合正向预查正则
假设你的目标字符串是:
str = "Hello world. This is a test. Ruby is great. Let's split it."
要实现每隔一个英文句号分割,也就是每两个句子组成数组的一个元素,可以用这段代码:
result = str.split(/\.(?=[^.]+\.)/).map { |s| s.strip + '.' }
- 正则
/\.(?=[^.]+\.)/是正向预查逻辑:匹配那些后面还跟着「至少一个非句号字符+一个句号」的句号,这样就会在第1、3个句号的位置完成分割(刚好隔一个句号)。 map方法是为了把分割后丢失的补回来,同时去掉内容前后的多余空格。
如果你的字符串里句号后常跟着空格,可以调整正则兼容这种情况:
result = str.split(/\.\s*(?=[^.]+\.\s*)/).map { |s| s.strip + '.' }
方法二:用scan直接匹配目标组合
这种方式更直观,直接匹配「两个以句号结尾的句子组合」:
result = str.scan(/([^.]+\.[^.]+\.)/).flatten.map(&:strip)
scan会找出所有符合正则的子串,正则([^.]+\.[^.]+\.)的作用就是匹配连续两个以句号收尾的内容。flatten用来把scan返回的二维数组转成一维,map(&:strip)去掉每个元素前后的空格。
内容的提问来源于stack exchange,提问作者beaconhill
相关产品推荐
相关产品推荐

