如何使用正则表达式,我会使用"评级 - 小星级评分-4字段_stars_rating csm_review"并使用gsub只返回" rating-4",其中4可以是任何数字?我使用的任何东西只替换部分位
答案 0 :(得分:2)
gsub
在这里是错误的选择。做这样的事情会更有意义:
"ratings-small star rating-4 field_stars_rating csm_review".match(/\brating-\d\b/).to_s
因为您正在寻找字符串的特定部分,所以直接搜索它会更有意义。
要获得连字符后面的数字,请使用:
"ratings-small star rating-4 field_stars_rating csm_review".match(/\brating-(\d)\b/)[0]
答案 1 :(得分:1)
不是试图将所有内容替换为单词的位置,或者在想要匹配的数字位置之后,更好的方法是在整个字符串中使用子模式match。
string.match(/\b[a-z]+-\d+\b/i)
<强>解释强>
单词边界不消耗任何字符。它断言,一方面有一个字符,而另一方则没有。
\b # the boundary between a word char (\w) and not a word char
[a-z]+ # any character of: 'a' to 'z' (1 or more times)
- # '-'
\d+ # digits (0-9) (1 or more times)
\b # the boundary between a word char (\w) and not a word char
答案 2 :(得分:1)
因为你试图保留一些字符串,而不是考虑如何删除任何其他内容而只留下有趣的部分,你应该考虑如何提取字符串的相关部分。带有regexp参数的String#[]
方法将是我的选择:
string = "ratings-small star rating-4 field_stars_rating csm_review"
string[/\brating-\d\b/]
# => "rating-4"
答案 3 :(得分:0)
我不会选择纯正的正则表达式,因为它会让你很难阅读:
string = "ratings-small star rating-4 field_stars_rating csm_review"
string.split.select {|s| s =~ /^rating-\d$/}.join(' ')
如果您只期望一个元素:
string[/\brating-\d\b/]