快速背景:我有一个字符串,其中包含对其他页面的引用.页面链接使用格式:"#12".哈希后跟页面的ID.
说我有以下字符串:
str = 'This string links to the pages #12 and #125'
Run Code Online (Sandbox Code Playgroud)
我已经知道需要链接的页面的ID:
page_ids = str.scan(/#(\d*)/).flatten
=> [12, 125]
Run Code Online (Sandbox Code Playgroud)
如何遍历页面ID并将#12和#125链接到各自的页面?我遇到的问题是如果我执行以下操作(在rails中):
page_ids.each do |id|
str = str.gsub(/##{id}/, link_to("##{id}", page_path(id))
end
Run Code Online (Sandbox Code Playgroud)
这适用于#12,但它将#125的"12"部分链接到ID为12的页面.
任何帮助都是极好的.
s = "#main= 'quotes'
s.gsub "'", "\\'" # => "#main= quotes'quotes"
Run Code Online (Sandbox Code Playgroud)
这似乎是错误的,我希望得到 "#main= \\'quotes\\'"
当我不使用转义字符时,它按预期工作.
s.gsub "'", "*" # => "#main= *quotes*"
Run Code Online (Sandbox Code Playgroud)
所以必须与逃避有关.
使用ruby 1.9.2p290
我需要用反斜杠和引号替换单引号.
更多的不一致:
"\\'".length # => 2
"\\*".length # => 2
# As expected
"'".gsub("'", "\\*").length # => 2
"'a'".gsub("'", "\\*") # => "\\*a\\*" (length==5)
# WTF next:
"'".gsub("'", "\\'").length # => 0
# Doubling the content?
"'a'".gsub("'", "\\'") # => "a'a" (length==3)
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?
我试图gsub在rails应用程序中删除字符串中的非单词字符.我使用了以下代码:
somestring.gsub(/[\W]/i, '') #=> ""
Run Code Online (Sandbox Code Playgroud)
但它实际上是不正确的,它也会删除字母k.正确的应该是:
somestring.gsub(/\W/i, '') #=> "kkk"
Run Code Online (Sandbox Code Playgroud)
但我的问题是使用rspec包含上述代码的rails控制器的单元测试不起作用,单元测试实际上通过了.所以我在rspec中创建了一个非常极端的测试用例
it "test this gsub" do
'kkk'.gsub(/[\W]/i, '').should == 'kkk'
end
Run Code Online (Sandbox Code Playgroud)
上面的测试用例应该失败,但它实际上已经过去了.这里有什么问题?为什么测试通过?
我有这个表达式:
channelName = rhash["Channel"].gsub("'", " ")
Run Code Online (Sandbox Code Playgroud)
它工作正常.但是,我只能用它替换1个字符.我想为替换添加一些字符.所以我尝试了以下方法:
channelName = rhash["Channel"].gsub(/[':;] /, " ")
Run Code Online (Sandbox Code Playgroud)
这不起作用,即没有对字符串进行替换,也没有错误消息.我也试过这个:
channelName = rhash["Channel"].gsub!("'", " ")
Run Code Online (Sandbox Code Playgroud)
这导致一个空白的字符串.所以绝对不是我想要的.
我想有一个gsub方法用我的字符串中的空格替换以下字符:
' ; :
Run Code Online (Sandbox Code Playgroud)
我的问题:
如何构建我的gsub方法,以便用空格替换上述字符的所有实例?
gsub发生了什么事!以上为空白.
要在json中编码字符串,需要使用反斜杠转义几个保留字符,并且每个字符串都需要用双引号括起来.目前,该jsonlite包使用deparse基R中的函数实现了这个:
deparse_vector <- function(x) {
stopifnot(is.character(x))
vapply(x, deparse, character(1), USE.NAMES=FALSE)
}
Run Code Online (Sandbox Code Playgroud)
这样做的诀窍:
test <- c("line\nline", "foo\\bar", "I said: \"hi!\"")
cat(deparse_vector(test))
Run Code Online (Sandbox Code Playgroud)
然而deparse,对于大型载体来说,结果却很慢.另一种实现是gsub单独为每个角色:
deparse_vector2 <- function(x) {
stopifnot(is.character(x))
if(!length(x)) return(x)
x <- gsub("\\", "\\\\", x, fixed=TRUE)
x <- gsub("\"", "\\\"", x, fixed=TRUE)
x <- gsub("\n", "\\n", x, fixed=TRUE)
x <- gsub("\r", "\\r", x, fixed=TRUE)
x <- gsub("\t", "\\t", x, fixed=TRUE)
x <- gsub("\b", "\\b", x, fixed=TRUE)
x <- gsub("\f", "\\f", x, fixed=TRUE)
paste0("\"", x, …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用gsubR来替换我正在处理的一些字符串中的一堆奇怪的字符.一切正常,除非我投入"]",这使整个事情无所作为.我正在使用\\,gsub("[\\?\\*\\]]", "", name)但它仍然无法正常工作.这是我的实际例子:
name <- "R U Still Down? [Remember Me]"
Run Code Online (Sandbox Code Playgroud)
我想要的是:names成为"R U Still Down Remember Me"
当我这样做:
names <- gsub("[\\(\\)\\*\\$\\+\\?'\\[]", "", name)
它半工作,我得到"R U Still Down Remember Me]"
但是当我这样做时:
names <- gsub("[\\(\\)\\*\\$\\+\\?'\\[\\]]", "", name)
没有任何反应.(即我得到"R U Still Down? [Remember Me]")
有任何想法吗?我试过切换事情的顺序,等等.但我似乎无法弄明白.
我有一个这样的数据框:
name weight
r apple 0.5
y pear 0.4
y cherry 0.1
g watermelon 5.0
pp grape 0.5
y apple pear 0.4
... ...
Run Code Online (Sandbox Code Playgroud)
我想删除名称列中第一个空格之前的所有字符.谁有人帮我一个忙?谢谢!
我有一个向量,我想用多个元素替换一个元素,我可以用一个而不是多个替换,任何人都可以帮忙吗?
比如我有
data <- c('a', 'x', 'd')
> data
[1] "a" "x" "d"
Run Code Online (Sandbox Code Playgroud)
我想,以取代"x"与"b", "c"获得
[1] "a" "b" "c" "d"
Run Code Online (Sandbox Code Playgroud)
然而
gsub('x', c('b', 'c'), data)
Run Code Online (Sandbox Code Playgroud)
给我
[1] "a" "b" "d"
Warning message:
In gsub("x", c("b", "c"), data) :
argument 'replacement' has length > 1 and only the first element will
be used
Run Code Online (Sandbox Code Playgroud) 我想仅从表格的第4和第5列中删除点(.).
input
1 10057 . A AC
1 10146 . AC. A
1 10177 . A AC
1 10230 . AC .A,AN
1 10349 . CCCTA C,CCCTAA.
1 10389 . .AC A,AN
desired output
1 10057 . A AC
1 10146 . AC A
1 10177 . A AC
1 10230 . AC A,AN
1 10349 . CCCTA C,CCCTAA
1 10389 . AC A,AN
Run Code Online (Sandbox Code Playgroud)
所以我尝试了以下命令.
awk 'BEGIN {OFS=FS="\t"} {gsub("\.","",$4);gsub("\.","",$5)}1' input
Run Code Online (Sandbox Code Playgroud)
我得到了这个结果(整个第4和第5列被删除了).
1 10057 .
1 10146 .
1 10177 . …Run Code Online (Sandbox Code Playgroud) 我有一个字符串
vec = c('blue','red','flower','bee')
Run Code Online (Sandbox Code Playgroud)
我希望将不同的字符串转换为相同的一行而不是单独的,即我可以gsub blue和gsub red使它们都拼写为'color'.我怎么能在一行中做到这一点?
输出应该是:'颜色','颜色','花','蜜蜂'