Ruby读取字符串模式并编辑它们
我有一条消息,这条消息的回复在主题中 模式如下:Ruby读取字符串模式并编辑它们,ruby,string,Ruby,String,我有一条消息,这条消息的回复在主题中 模式如下: RE[22] Some subject 当对方回复时,应该是: RE[23] Some subject 所以基本上我需要得到[和]RE[**]之间的值,并对其进行更改。。但我不能只看长度,因为它可能会改变,例如,它可能是RE[254] 我试图用regex或scan找到解决方案,但我无法以任何方式实现这一点。。 我真的不明白如何在ruby中做到这一点。试试这个: "RE[22] Some subject".sub(/^RE\[(\d+)\](.
RE[22] Some subject
当对方回复时,应该是:
RE[23] Some subject
所以基本上我需要得到[和]RE[**]之间的值,并对其进行更改。。但我不能只看长度,因为它可能会改变,例如,它可能是RE[254]
我试图用regex或scan找到解决方案,但我无法以任何方式实现这一点。。
我真的不明白如何在ruby中做到这一点。试试这个:
"RE[22] Some subject".sub(/^RE\[(\d+)\](.*)/) do
value = $1.to_i
"RE[#{value + 1}]#{$2}"
end
正则表达式非常强大。你真的应该把它们学好 如果这些是您期望的唯一数字,那么使用/\d+/匹配它们就足够了
如果您想确保这些是括号内的数字,您可以使用/?好的,我知道它是如何工作的,多亏了Christoph Petschnig和davidrac 最后,我做的是:
@string = "RE[22] Kaut kads random teksts..."
@get_re = nil
@string.sub(/\d+/) do |x|
@get_re = x.to_i + 1
end
辛达做到了这一点,因为我的回复号码总是第一位的,但是如果它的第一条消息和它没有RE[]前缀,那该怎么办呢,所以我需要考虑一下这个问题
我对davidrac示例进行了一些修改,得到了解决方案。因此,现在@string是否具有RE[]前缀无关紧要:
@string = "RE[25] some random subject with more numbers 245 in it"
或否:
@string = "some random subject with more numbers 245 in it"
此代码将对其进行编辑或添加:
@get_re = nil
@string.sub(/(?<=RE\[)\d+(?=\])/) do |x|
@get_re = @string["RE[#{x.to_i + 1}]"]
end
return @get_re? @get_re : "RE[1] " + @string
这对我来说毫无意义。。这个dos到底是做什么的=>\d+\i这个dos=>/^RE[\d+].*/adn这个dos是什么dos$1来自它很难解释一个stackoverflow注释中最多600个字符的正则表达式。谷歌搜索正则表达式教程,并花费至少几个小时编写一个好的教程。在您的编程生涯中,您将非常感谢它。您可能会使用Stringnext:999.next=>1000而不是计算值