如何删除关键字的子字符串右侧

时间:2016-01-19 10:09:30

标签: ruby string

我正在尝试删除关键字右侧的文字。我有这样的文字:

a = "` 27 3 4400 Local/STD secs Hide Hide ` View Detail More List."

我想删除'Hide'及其右侧的所有文字。

我尝试通过正则表达式执行此操作:

a.scan(/?:Hide/)

它只是让我出现了'Hide'

4 个答案:

答案 0 :(得分:3)

您可以使用

Hide之后的文本替换为行尾
a.sub(/Hide.*/, '')
  • Hide - 字面上匹配Hide
  • .* - 在此之后尽可能多的字符

Demo

答案 1 :(得分:3)

partition会很简单。

a.partition("Hide").first

答案 2 :(得分:2)

无需使用正则表达式

使用子字符串方法和String#index

index = a.index('Hide')      # Get the index of `Hide` and subtract by one
substring = a[0...index]     # Get substring from zero'th index to the index of Hide

示例:

a = "27 3 4400 Local­/STD secs Hide Hide blah blah blah"­
a[0...a.ind­ex('Hide')­]
#=> "27 3 4400 Local/STD secs "

答案 3 :(得分:2)

您说要删除keyword标识的文字,而不是substring标识的文字。为此,我建议你使用正则表达式:

r = /
    .*?      # Match any characters any number of times, lazily
    (?=      # Begin a positive lookahead
    \bHide\b # Match 'Hide' preceded and followed by a word break
    )        # end positive lookahead
    /x       # Extended/free-spacing regex definition mode

"Blah, blah Hide Hide blah, blah"[r]
  #=> "Blah, blah "
"Hideous blah, blah Hide Hide blah, blah"[r]
  #=> "Hideous, blah, blah "

请注意懒惰的需要:

"Blah, blah Hide Hide blah, blah"[/.*(?=\bHide\b)/]
  #=> "Blah, blah Hide "

编辑:一个更简单(更好)的解决方案将是@AvinashRaj在问题评论中提出的建议,修改后我在另一条评论中提出修改。