我想使用正则表达式返回"John Doe"
。
string = "{name} John Doe {phone} 555-5555"
我真的想掌握正则表达式。你是怎么学习的?
答案 0 :(得分:1)
答案 1 :(得分:1)
对于这样的事情,通常最好是标记化,然后使用某种中间表示。 String#scan
非常适合从重复模式中提取数据:
string = "{name} John Doe {phone} 555-5555"
string.scan(/\{([^}]+)\}\s+([^\{]+)/).collect { |s| s.each { |c| c.sub!(/\s+$/, '') } }
# => [["name", "John Doe"], ["phone", "555-5555"]]
你甚至可以简单地将其重新映射为哈希:
Hash[string.scan(/\{([^}]+)\}\s+([^\{]+)/).collect { |s| s.each { |c| c.sub!(/\s+$/, '') } }]
# => {"name"=>"John Doe", "phone"=>"555-5555"}
掌握正则表达式的关键是首先学习如何阅读它们,然后进行大量试验以了解它们的行为方式。拥有像Rubular这样的工具可以帮助进行探索,但有几本关于这个主题的好书值得一看。 O'Reilly有一个相当强大的选择,还有其他。
我的经验主要来自Perl,它使用正则表达式来处理各种各样的事情。