ruby - 在 Ruby 中的字母和数字之间插入空格

标签 ruby regex

我正在格式化地址列表,例如:

New york city23 b
Miami 355c

我需要他们看起来像

New York City 23 B
Miami 355 C

问题是在字母+数字组合前后添加空格。我提出了以下正则表达式来突出问题区域:

/\p{L}\d|\d\p{L}/

但是我缺少在它们之间实际放置空格的逻辑。现在代码看起来像

"moscow city46 d".titleize.gsub(/\p{L}\d|\d\p{L}/, ' \0')
# titleize is a Rails method

输出

Moscow Cit y46 D

最佳答案

既然您使用了 titleize,我假设您不介意使用其他 ActiveSupport 方法。它不像某些人那样“聪明”,但是String#squish ,用一个空格替换连续的空格,这是一个非常简单的解决方案:

str.gsub(/\d+/, ' \0 ').squish.titleize

Ruby(没有 Rails)有一个类似的 String#squeeze方法,但与 squish 不同,它不会修剪前导和尾随空格,因此它必须与 String#strip 结合使用.

关于ruby - 在 Ruby 中的字母和数字之间插入空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43372399/

相关文章:

ruby-on-rails - Rails 中的默认 getter 和 setter 是什么样子的?

ruby-on-rails - Ruby 3.2.3 rake 似乎不起作用 - 或者什么的。 rake 中止!无法加载此类文件

regex - 使用正则表达式修剪URL?

regex - 无法查询正在使用正则表达式解析数据的外部 Hive 表

node.js - 如何在node.js中获得对regexp-match-indices的支持?

Ruby/Mechanize 有什么方法可以耗尽 RAM? -> 分配内存失败

ruby - 如何创建自定义 while block

c# - 如何替换到空格?

C++ Clang 无法解析此 Lookbehind 正则表达式

ruby - 在没有基准或时间的情况下用 Ruby 测量用户时间或系统时间