删除空格和等号之间的任何内容

时间:2016-03-10 14:50:32

标签: ruby regex

我有这个字符串:

2014-01-09T06:16:53.748849+00:00 heroku[router]: at=info method=POST fwd="94.66.255.106" dyno=web.12 connect=12ms service=21ms status=200 bytes=78

我希望如此:

2014-01-09T06:16:53.748849+00:00 heroku[router]: info POST "94.66.255.106" web.12 12ms 21ms 200 78

我试过这样的事情:

/.*=/

但它匹配第一个和最后一个等号之间的任何内容。

我确定更换第一个是好的,然后使用类似gsub的内容替换它们。

3 个答案:

答案 0 :(得分:2)

您的模式/.*=/匹配任何字符,但直到最后一行遇到的=。这是因为*是一个贪婪的量词,并且匹配尽可能多的字符。

您似乎需要在=之前匹配没有空格的子字符串。你可以使用

s.gsub(/[^\s=]+=/, '')

请参阅IDEONEregex demo

s = '2014-01-09T06:16:53.748849+00:00 heroku[router]: at=info method=POST fwd="94.66.255.106" dyno=web.12 connect=12ms service=21ms status=200 bytes=78'
puts s.gsub(/[^\s=]+=/, '')
# => 2014-01-09T06:16:53.748849+00:00 heroku[router]: info POST "94.66.255.106" web.12 12ms 21ms 200 78

模式匹配:

  • [^\s=]+ - 1个或更多(由于+量词)字符以外的空格和=[^...]是否定字符类,所有字符都不在其中匹配)
  • = - 等号

答案 1 :(得分:1)

总而言之,你想要的正则表达式将选择所有字符串(长度为1+),这些字符串是非空白字符,并且位于等号之前,包括等号。

/\S+=/是正则表达式。 Here's a demo.

答案 2 :(得分:0)

这是因为。*的贪婪行为改为:

/.*?=/