我有这个字符串:
@body = "@JohnM >John Miller_user Howdy! What's up?"
我希望它是:
@body = "Howdy! What's up?"
如何使用正则表达式对gsub
进行编码?
以下是更多案例:
在gsub
之前 - (_user
总是在用户名之后。并且在用户名和正文字符串之间总是有空格):
1. `@PaulW >PaulWhite_user Good afternoon`
2. `@Andy >Andy_user Hi!`
3. `@JessicaT >Jessica Turner_user Nooooooooooo`
我想要的输出:
1. `Good afternoon`
2. `Hi!`
3. `Nooooooooooo`
我希望仅在符合此情况时才使用gsub
:
@*****(space)>*******_user(space)Body string
答案 0 :(得分:2)
这应该可以解决问题:
yourString.gsub(/(.*(_user ))/,'')
<强>解释强>
.*
将匹配任何字符(发布0次或更多次)(_user )
将匹配确切的字符串"_user "
"(anything)_user "
替换的""
(没有被删除)==================
如果您想要字符串的所有部分,您可以执行以下操作:
str = "@Andy >Paul_user Hi!"
match = /@(.*) >(.*)_user (.*)/.match(str)
将导致:
match[1] => "Andy"
match[2] => "Paul"
match[3] => "Hi!"
答案 1 :(得分:1)
试试这个:
/@(.*) >(.*)_user (.*)/
它包括@和大于字符。
答案 2 :(得分:1)
或
str.match(/_user (.+)/)[1]
"@PaulW >PaulWhite_user Good afternoon".match(/_user (.+)/)[1] # => "Good afternoon
"@Andy >Andy_user Hi!".match(/user (.+)/)[1] # => "Hi!"
"@JessicaT >Jessica Turner_user Nooooooooooo".match(/_user (.+)/)[1] # => "Nooooooooooo"
要了解其工作原理,请查看MatchData
对象m
:
m = "@PaulW >PaulWhite_user Good afternoon".match(/_user (.+)/)
=> #<MatchData "_user Good afternoon" 1:"Good afternoon">
通过将其转换为数组(使用MatchData#to_a
):
m.to_a # => ["_user Good afternoon", "Good afternoon"]
我们看到我们想要的字符串是:
m.to_a[1] # => "Good afternoon"
但MatchData#[]
允许我们直接获取:
m[1] # => "Good afternoon"
顺便说一句,我最初有str.match(/.*_user (.+)/)[1]
,但后来意识到.*
什么也没做,所以删除了它。