我有以下字符串:
"h3. My Title Goes Here"
我基本上想从字符串中删除前四个字符,以便我回来:
"My Title Goes Here".
问题是我正在迭代一个字符串数组而不是所有字符串前面都有h3.
部分所以我不能盲目地抛弃前四个字符。
我检查了文档,我能找到的最接近的是chomp
,但这只适用于字符串的结尾。
现在我正在这样做:
"h3. My Title Goes Here".reverse.chomp(" .3h").reverse
这给了我想要的输出,但必须有更好的方法。我不想无缘无故地反转一个字符串两次。还有其他方法可行吗?
答案 0 :(得分:3)
您可以将sub与正则表达式一起使用:
s = 'h3. foo'
s.sub!(/^h[0-9]+\. /, '')
puts s
输出:
foo
正则表达式应理解如下:
^ Match from the start of the string. h A literal "h". [0-9] A digit from 0-9. + One or more of the previous (i.e. one or more digits) \. A literal period. A space (yes, spaces are significant by default in regular expressions!)
您可以修改正则表达式以满足您的需要。请参阅正则表达式教程或语法指南,例如here。
答案 1 :(得分:3)
要更改原始字符串,请使用sub!
,例如:
my_strings = [ "h3. My Title Goes Here", "No h3. at the start of this line" ]
my_strings.each { |s| s.sub!(/^h3\. /, '') }
要不更改原始内容并仅返回结果,请删除感叹号,即使用sub
。在一般情况下,您可以使用正则表达式来匹配多个实例,在这种情况下使用gsub!
和gsub
- 没有g
只有第一个匹配是替换(如你所愿,在任何情况下,^
只能匹配一次到字符串的开头。)
答案 2 :(得分:2)
标准方法是使用regular expressions:
"h3. My Title Goes Here".gsub /^h3\. /, '' #=> "My Title Goes Here"
gsub
表示全局替换,它用字符串替换模式,在本例中为空字符串。
正则表达式包含在/
中,构成:
^
表示字符串
的开头
h3
字面匹配,因此意味着h3
\.
- 一个点通常表示任何字符,所以我们用反斜杠来逃避它
字面匹配