Удалить из строки первое вхождение заданного символа - PullRequest
1 голос
/ 25 ноября 2010
string =

"
[title]

{snippet}

[something else in bracket]

{something else}

more text 

#tags
"

Я хочу удалить первое вхождение [], и {}

s.clean_method или regexp должны вернуть строку, подобную этой

"
title

snippet

[something else in bracket]

{something else}

more text 

#tags
"

Язык Ruby 1.9.2

Ответы [ 3 ]

4 голосов
/ 25 ноября 2010

Вам нужно String#sub (не gsub):

irb> "[asd]{asd}[asd]{asd}".sub(/\[(.+?)\]/,'\1').sub(/\{(.+?)\}/,'\1')
=> "asdasd[asd]{asd}"
1 голос
/ 25 ноября 2010

Больше того же самого:

s = "[asd]{asd}[asd]{asd}"
%w({ } [ ]).each{|char| s.sub!(char,'')}
#=> "asdasd[asd]{asd}"
0 голосов
/ 25 ноября 2010

Ну, если это все, что вы хотите сделать, все, что вам нужно сделать, это

result = string.sub('{', '').sub('[', '').sub('}', '').sub(']', '')

Конечно, это ужасно не элегантное решение, и оно не учитывает такие вещи, как непревзойденные скобки и т. Д.

Лучшее решение, вероятно, будет:

pattern1 = /\{(.*?)\}/
pattern2 = /\[(.*?)\]/
match1 = pattern1.match(string)
result = string.sub(match1[0], match1[1])
match2 = pattern2.match(result)
result = result.sub(match2[0], match2[1])

Возможно, это можно упростить, но это то, что приходит мне в голову:)

Кстати, если вы хотите заменить все экземпляры, все, что вам нужно сделать, это использовать gsub вместо sub

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...