Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 8 years ago.
Improve this question
Here is a string a content is "hi all I'm new here(seriously)"
How can I return a "hi+all+I'm+new+here" using ruby code?
Why not simply chain the .gsub() commands?
x.gsub(/\(.*?\)/, '').gsub(/\s+/,'+')
Also, you can update your first gsub to delete any whitespace preceding the brackets aswell.
x.gsub(/\s+\(.*?\)/, '')
If you really want to use a single gsub operation, you can pass a hash as the replacement parameter:
x.gsub(/( *\(.*?\)| )/, ' ' => '+', default: '')
# => "hi+all"
What this does is captures either something in brackets (including the leading spaces) or spaces. If the capture is a space - it is replaced by '+', otherwise, it replaces to empty string ''
Related
Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 6 years ago.
Improve this question
How can I extract substring from a string using key pattern and delimiter. e.g.
mystring = 'toto=1,2,3 mynames=ralf,john,franky myhobbies=tennis,soccer,naps'
I want to extract: ralf,john,franky
The pattern here is: mynames
The delimiter is: =
You can use this regular expression:
mynames=([^\s]+)
And then, look for the first group: $1
Here is a live example in JavaScript (works also in other languages):
var regex = /mynames=([^\s]+)/;
var text = "toto=1,2,3 mynames=ralf,john,franky myhobbies=tennis,soccer,naps"
console.log(regex.exec(text)[1]);
If you are looking for a regex which does only match everything after mynames=, so that you don't need to look for the first group, you can also use a positive lookbehind:
(?<=mynames=)[^\s]+
Here is a live example: https://regex101.com/r/mem6mA/1
Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 8 years ago.
Improve this question
In Ruby, I would like to create a regular expression that matches the following:
building/liberty-green/6d
(the word building and some number somewhere after it)
Currently, I have /building/ and need to add \d (any digit) to it, but I don't know how.
You need /building\/[\w-]+\/\w+/. For example:
irb(main):001:0> /building\/[\w-]+\/\w+/.match("building/liberty-green/6d")
=> #<MatchData "building/liberty-green/6d">
That expression will match any string that:
Starts with /building/
Then follows with one or more word characters or dashes (eg. foo-bar, foo, bar-1)
Then follows with a /
Finally ends with one or more word characters (eg. foo, 6d, 12345)
Note that \w includes digits.
Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 8 years ago.
Improve this question
I'm trying to make a gsub that when I make an input like this:
'09/02 10:00 hs any string'
Will give me back something like:
'09/02 10:00'
So my gsub should take out all the strings that are non-numbers but I need ':' and '/' to stay
Help please.
Takes out all the strings that are non-numbers but I need ':' and '/' to stay
"09/02 10:00 hs any string".gsub(/[^0-9\/:]/, '')
# "09/0210:00"
Try this:
result = '09/02 10:00 hs any string'.gsub(/(?<=^\d{2}\/\d{2} \d{2}:\d{2}).*/, '')
the idea is to not capture the date time putting it in a lookbehind.
Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 8 years ago.
Improve this question
How can I convert the string russ(ai)(edocn)cup to russiancodecup using Ruby?
By using gsub with a block, you can replace any match of a regular expression by the result of this block.
s = "russ(ai)(edocn)cup"
s.gsub(/\(([^)]*)\)/) {$1.reverse} # => "russiancodecup"
Here the regular expression will match any non-) character between brackets. Then it will send reverse to $1 which is gonna be the content between brackets.
$0 will be the complete match and $n, the nth "submatch". (anybody for the correct word ?)
Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 8 years ago.
Improve this question
I am trying to find a regex that matches any string with two consecutive backslashes. I'm trying every variation, any help? And info on handling backslashes
b='\\mystring'
if b=~/\\\\/
puts "it matches"
end
I can't seem to get this to match.
Your regex looks good, but your string does NOT contain two backslashes, it just contains one. It looks like it contains two but that's only in your source file, not in the actual string. Try this:
'\\\\mystring' =~ /\\\\/
Backslash is still a bit magic even inside hard ' quotes. For one thing, it needs to be able to quote ' itself, and so what if your string had a \ followed by '? You need to be able to backslash-quote the backslash in order to unambiguously get a single \ before a magic character, and for sanity, everywhere else as well.
>> '\\'.length
=> 1
>> '\''
=> "'"
>> '\\'[1,1]
=> ""
>> '\\'[0,1]
=> "\\"