【发布时间】:2018-06-05 11:56:34
【问题描述】:
我正在使用list of mathematical expressions。我已经确定了 6 种主要的表达方式。我正在使用正则表达式过滤掉每个模式并将相似的表达式写入一个文件,如果任何表达式与任何正则表达式都不匹配,这些表达式将被写入一个单独的文件 (Log.txt)。
s1 = "(5.0 - 50.0)"
s2 = "((5.0 - 50.0) - 15.0)"
s3 = "(15.0 - (5.0 - 50.0))"
s4 = "((43.0 - 85.0) + (18.0 + 84.0))"
s5 = "(100.0 - ((5.0 - 57.0) + 92.0))"
s6 = "(((12.0 + 89.0) - 73.0) - (58.0 - 90.0))"
我尝试过同时使用嵌套的 if-else 和 ifelse()。代码选择第一个模式并将其写入“ExpressionType1.txt”,然后它会给出错误。当模式与正则表达式不匹配时,它不会转到 else 子句。下面的代码仅适用于两种类型的表达式。有没有其他方法可以在 if-else 条件下使用正则表达式?
expressionList = read.table("expressionList.txt",header = T,sep = "\n")
for(i in 1:length(expressionList[,1])){
currentExpression = as.character(expressionList[i,1])
ifelse(grepl("^\\(-?\\d+\\.\\d+\\s[\\+\\-\\*\\/]\\s-?\\d+\\.\\d+\\)$",currentExpression, perl = T),
write(currentExpression,file="ExpressionType1.txt",append=TRUE),
ifelse(grepl("^\\(\\(-?\\d+\\.\\d+\\s[\\+\\-\\*\\/]\\s-?\\d+\\.\\d+\\)\\s[\\+\\-\\*\\/]\\s-?\\d+\\.\\d+\\)$",currentExpression, perl = T),
write(currentExpression,file="ExpressionType2.txt",append=TRUE), write(currentExpression,file="Log.txt",append=TRUE)
))
}
嵌套 if-else
ifelse(grepl("^\\(-?\\d+\\.\\d+\\s[\\+\\-\\*\\/]\\s-?\\d+\\.\\d+\\)$",
currentExpression, perl = T) == TRUE){
write(currentExpression,file="ExpressionType1.txt",append=TRUE)
} else if(grepl("^\\(\\(-?\\d+\\.\\d+\\s[\\+\\-\\*\\/]\\s-?\\d+\\.\\d+\\)\\s[\\+\\-\\*\\/]\\s-?\\d+\\.\\d+\\)$",
currentExpression, perl = T) == TRUE){
write(currentExpression,file="ExpressionType2.txt",append=TRUE)
} else{
write(currentExpression,file="Log.txt",append=TRUE)
}
ans[test & ok] 中的错误
另外:警告信息:
在代表中(是的,length.out = length(ans)):
'x' 为 NULL,因此结果将为 NULL
【问题讨论】:
-
您将
ifelse()与if (...) ... else ...混淆了。这些是不同的。参见例如stackoverflow.com/questions/16606886/…
标签: r regex if-statement