0

我有这个字符串:

@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
4

3 回答 3

2

这应该可以解决问题:

yourString.gsub(/(.*(_user ))/,'')

解释:

  1. .*将匹配任何字符(出现 0 次或多次)
  2. (_user )将匹配确切的字符串"_user "
  3. 结合 1 和 2,将匹配"(anything)_user "替换为""(也没有删除)

===================

如果您想获取string 的所有部分,则可以执行以下操作:

str = "@Andy >Paul_user Hi!"
match = /@(.*) >(.*)_user (.*)/.match(str)

将导致:

match[1] => "Andy"
match[2] => "Paul"
match[3] => "Hi!"
于 2013-11-01T18:12:44.173 回答
1

尝试这个:

/@(.*) >(.*)_user (.*)/

它包括@ 和大于字符。

于 2013-11-01T18:14:04.050 回答
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],但后来意识到.*什么也没做,所以删除了它。

于 2013-11-01T18:35:28.487 回答