我有一个类似于此的R函数:
logFun <- function(msg1, msg2){
return(sprintf("%s: %s", msg1, msg2))
}
logFun("123", "456")
它在很多地方使用过,并不总是很好地输入,例如这些都是示例用例:
var1 <- "aa"
var2 <- "bb"
logFun(var1, var2)
logFun("aa", var2)
logFun("aa", "bb")
logFun(var1, "bb")
logFun(msg1 = "aa", msg2 = "bb")
logFun(msg1 = var1, msg2 = "bb")
...
说我有一个新功能,例如
logFun2 <- function(msg1, msg2, type){
return(sprintf("[%s] %s: %s", type, msg1, msg2))
}
logFun2("123", "456", "bug")
并且必须保留函数调用(msg1, msg2, type)
,因为许多函数已从logFun
转换为logFun2
。我试图用Sublime做的是用以下内容替换上面的用例列表:
logFun2(var1, var2, type = "bug")
logFun2("aa", var2, type = "bug")
logFun2("aa", "bb", type = "bug")
logFun2(var1, "bb", type = "bug")
logFun2(msg1 = "aa", msg2 = "bb", type = "bug")
logFun2(msg1 = var1, msg2 = "bb", type = "bug")
我已经阅读了一些关于lookbehind匹配的内容,但发现它是否是一个可行的工作,或者我是否应该找到问题的另一个解决方案。使用https://regex101.com/,我已设法将logFun(
部分与(?<=logFun\()
隔离,但不确定从何处开始。任何指导将不胜感激:)
谢谢,Jonny
修改1
问:为什么无法使用参数logFun2
的默认值定义type = "bug"
函数,只需将logFun
替换为logFun2
?
答:实际上,我们并不只是logFun
。我们说有函数logBug
,logInfo
,logWarning
等等。然后我们将这些函数更改为单数函数logGeneral
,例如logBug
变为logGeneral(.., .., type = "bug")
。
所以,你是对的,我们可以为一种类型的日志指定默认值而不用担心那个。
答案 0 :(得分:1)
我不使用Sublime,但正则表达式可以隔离你的函数:
(\blogFun)(\b\(.*)\)
并替换:
$12$2, type = "bug")
答案 1 :(得分:1)
由于有多种类型,因此可以对所有类型使用正则表达式:
logFun2(\2, type = "\L\1")
然后在“log”之后使用PCRE小写转换\ L替换类型名称。
替换字符串:
Private Sub CommandButton21_Click()
Dim index As Integer, lapsedSchemes As New Collection, lapseDates As New
Collection
Dim iRow As Long
Dim iCol As Integer
Sheet1.Columns(5).NumberFormat = "dd-mmm-yy"
Sheet1.Columns(14).NumberFormat = "dd-mmm-yy"
iRow = 2
Do While Sheet3.Cells(iRow, 1).Value <> ""
lapsedSchemes.Add Sheet3.Cells(iRow, 1).Value
lapseDates.Add Sheet3.Cells(iRow, 2).Value
iRow = iRow + 1
Loop
iRow = 2
Do While Cells(iRow, 7).Value <> ""
index = 1
If Cells(iRow, 9).Value = "" Then
If Cells(iRow, 7).Value = Cells(iRow, 8).Value Then
Cells(iRow, 9).Value = "Policy Holder"
Else
Cells(iRow, 9).Value = "Dependant"
End If
End If
For Each scheme In lapsedSchemes
If Cells(iRow, 4).Value = scheme And Cells(iRow, 5) = lapseDates(index) Then
Cells(iRow, 4).EntireRow.Delete
iRow = iRow - 1
Exit For
End If
index = index + 1
Next scheme
iRow = iRow + 1
Loop
appendLegacyData (iRow)
Range("A1:AZ10000").Sort Key1:=Range("A1"), Order1:=xlAscending, Key2:=Range("D1"), Order2:=xlAscending, Key3:=Range("E1"), Order3:=xlAscending, Header:=xlYes
End Sub
测试here
答案 2 :(得分:1)
使用我用于你的案例的崇高:
查找: (logFun)(\(.+)\)
替换: \12\2, type = "bug")
如果您还有logBug, logInfo, logWarning
(或甚至logDebug(paste("annoying", "case"), msg2 = "data_prep")
),那么您只需修改查找部分:
查找: (log[A-Z][a-z]*)(\(.+)\)