草庐IT

regexp_replace

全部标签

ruby - 什么是 Replace Conditional with Polymorphism 重构?它是如何在 Ruby 中实现的?

我最近在要求消除ruby​​中的if..else条件时遇到了用多态性重构替换条件。thelink任何人都可以向我解释我如何在ruby​​中实现相同的功能吗?(一个简单的甜蜜代码就可以) 最佳答案 ReplaceConditionalwithPolymorphismRefactoring非常简单,而且几乎就是它听起来的样子。您有一个带有如下条件的方法:defspeedcase@typewhen:europeanthenbase_speedwhen:africanthenbase_speed-load_factor*@number_of

ruby - ruby 的 Hash.replace 或者 Array.replace 有什么用?

我总是在Array和Hash文档中看到replace,我一直认为它很奇怪。我确定我已经做过很多次这样的事情:a=[:a,:b,:c,:d]...ifsome_conditiona=[:e,:f]end但我从没想过用这个代替:a=[:a,:b,:c,:d]...ifsome_conditiona.replace[:e,:f]end我认为这是预期用途。这真的可以节省内存,或者有其他好处,还是只是一种风格? 最佳答案 a=[:e,:f]和a.replace[:e,:f],两条语句生成指令如下:1.a=[:a,:b,:c,:d]a=[:e,

Ruby 1.9 unicode 在 Regexp 中转义

我刚刚将一个旧项目升级到Ruby1.9.3。我在使用unicode字符串时遇到了很多麻烦。归结为:p="\\username";"AnyString".match(/#{p}/)这在1.8中有效,并按预期返回nil。但是,在1.9中它会抛出:ArgumentError:invalidUnicodeescape我正在尝试匹配字符串中的'\u'。我认为这两个反斜杠会使它免于注册为unicode。我在这里错过了什么?编辑:单引号也不起作用:1.9.3p429:002>p='\\username';"AnyString".match(/#{p}/)ArgumentError:invalidUn

Ruby string.scan(/#{regexp_pattern}/) - 执行时间

问题:ruby.scan使用正则表达式模式最多需要5分钟。时间取决于正在扫描的字符串。测试在ruby​​“2.5.1”和ruby​​“2.4.2”上运行。例子:deftime_regexp_test(string)start=Time.nowputs"parsestart:#{start}"regexp_pattern="[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+[a-zA-Z0-9](?:[a-

ruby - :replace,如何用:invalid and :undef args for encoding using CSV.读取?

自ruby​​1.9起,CSV使用可以执行编码的解析器,如果您使用如下方法:::foreach、::open、::read和::readlines。例如:CSV.read('path/to/file',encoding:"windows-1252:UTF-8")尝试读取windows-1252中的文件并返回一个数组使用utf-8编码的字符串。如果字符集之间的编码转换有未定义的字符,它会给出一个Encoding::UndefinedConversionError。String.encode方法有一些很好的参数来处理这个未定义的字符:str=str.encode('UTF-8',无效::r

regex - 如何使用 Regexp.union 构建不区分大小写的正则表达式

我有一个字符串列表,需要使用Regexp#union从它们构建正则表达式.我需要生成的模式不区分大小写。#union方法本身不接受选项/修饰符,因此我目前看到两个选项:strings=%w|onetwothree|Regexp.new(Regexp.union(strings).to_s,true)和/或:Regexp.union(*strings.map{|s|/#{s}/i})两种变体看起来都有点奇怪。是否可以使用Regexp.union构造不区分大小写的正则表达式? 最佳答案 简单的起点是:words=%w[onetwothr

Ruby Regexp 精确匹配字符串

我有一个Ruby正则表达式问题。ifstring==/(^\d{1,3})/#thismatchesboth"24"and"24gravidautaliquam"#code...end我希望正则表达式只匹配“24”。我应该怎么做才能只允许数字? 最佳答案 ifstring=~/(^\d{1,3}$)/#code...end顺便说一句,如果您只想匹配“24”(而不是“39”或“42”),您不需要正则表达式,您需要进行直接比较:ifstring=="24"#code...end 关于Ruby

ruby - RegExp#match 只返回一个匹配项

请解释一下,为什么match()只返回一个匹配项,而不是四个(例如):s='aaaa'p/a/.match(s).to_a#=>["a"]奇怪的是,分组match()返回两个匹配,独立于实际匹配计数:s='aaaa'p/(a)/.match(s).to_a#=>["a","a"]s='aaaaa'p/(a)/.match(s).to_a#=>["a","a"]感谢您的回答。 最佳答案 需要使用.scan()进行多次匹配:ps.scan(/a/).to_a通过分组,整体匹配得到一个结果,每个组得到一个结果(使用.match()时。这两

ruby - 为什么你会 `replace` 而不是将新对象分配给同一个变量?

我正在查看SolitaireCipher中的测验摘要,当我偶然发现这段代码时:deftriple_cuta=@deck.index('A')b=@deck.index('B')a,b=b,aifa>b@deck.replace([@deck[(b+1)..-1],@deck[a..b],@deck[0...a]].flatten)end我不明白为什么有一个单独的方法replace为此。为什么不只执行以下操作?@deck=@deck[(b+1)..-1]+@deck[a..b]+@deck[0...a]当您可以将它们加在一起时,为什么还要麻烦地应用两个单独的方法(replace和flat

ruby-on-rails - 为什么string replace会修改原来的变量值?

9.3我的行为很奇怪,我不明白为什么:s=self.shopify_ps.title=>"Disco(Wholesale)"现在我想要一个新变量,其中包含s.title的内容,但没有“(批发)”部分。所以我做了以下事情:original_title=s.title=>"Disco(Wholesale)"original_title["(Wholesale)"]=""=>""现在如果我这样做:original_title=>"Disco"没关系,但奇怪的是,最后一个字符串替换似乎甚至影响了原始s变量:s.title=>"Disco"我真的无法理解...你能告诉我这里发生了什么吗?s.ti