是否可以使用正则表达式来匹配某些字符出现一定数量的字符串?
例如,我想找到所有包含1'a'和2'l'的单词。因此,以下词语将匹配:all,allow,tall,pallet,liability。
下面的示例只会找到序列中包含1'a'和2'l'的模式,而不是字符串中的任何顺序和位置。
echo -e "all\nallow\ntall\npallet\nliability" | grep 'a\{1\}l\{2\}'
答案 0 :(得分:1)
awk 'gsub(/a/,"&")==1 && gsub(/l/,"&")==2' file
答案 1 :(得分:0)
在具有无限前瞻性的引擎上,这应该起作用:
add_rows
说明:
如果字符串中没有library(data.table)
#version 1.10+
#Helper function to add extra rows
add_rows <- function(DT, n, fill='') {
rbindlist(list(DT, data.table(myfile=rep(fill,n), Myname=rep(fill,n))))
}
#Remove first column
lst2 <- lapply(my.list, function(x) x[, c("myfile", "myname")]) #if using version <= 1.9.8, x[, -1, with=FALSE]
#data table with most rows
len <- max(sapply(lst2, nrow))
#Add rows
lst3 <- lapply(lst2, function(x) add_rows(x, len-nrow(x)))
#Order rows
#braces have backslashes added because without them those characters have special meaning in searches
tofind <- c("13C\\(6\\)15N\\(4\\)", "13C\\(6\\)")
lst4 <- lapply(lst3, function(DT) {
pattern <- paste0(tofind, collapse="|")
moveup <- DT[, grep(pattern, myfile)]
myorder <- c(moveup, setdiff(1:nrow(DT), moveup))
DT[myorder]
})
#Combine data
newdf <- do.call('cbind', lst4)
#Update names
setnames(newdf, paste0(names(newdf), rep(1:table(names(newdf))[1], each=2)))
newdf
,则 (?=[^a]*a)(?=[^l]*l[^l]*l).*
会失败。
(?=[^a]*a)
,则 a
会失败。
(?=[^l]*l[^l]*l)
与实际字符串匹配。
但我不确定l
是否支持此功能。