我需要编写一个匹配这样的模式的正则表达式:
add_months_2 <- function(dt, n_months, month_days) {
dt[, year := StartDate %/% 10000][
, month := (StartDate - year * 10000) %/% 100][
, day := StartDate %% 100][
, new_month := c(1:12, 1:3)[month + n_months]][
, leap_year := (!(year %% 4) & (year %% 100)) | !(year %% 400)][
, max_d := (month_days + leap_year * c(0, 1, rep(0, 10)))[new_month]][
, StartDate_PlusM := year * 10000 + new_month * 100 + pmin(day, max_d)]
dt
}
在该特定语法中,它是两次相同的字符串(我不想匹配括号本身)。我设法想出了这个:
[[string|string]]
然而,由于某些原因,它不匹配,我不明白我的错误在哪里。
更新:事实证明它不起作用,因为我的代码很脏并且第一个字符串中有一些●字符,因此两个字符串都不相等:https://regexr.com/3n7ni
删除那些无关的字符使正则表达式匹配,虽然它仍然需要调整(比如不匹配闭包括号):https://regexr.com/3n7o7
答案 0 :(得分:1)
答案 1 :(得分:1)
\[{2}([^|\]]+)\|\1]{2}
\[{2}
按字面意思匹配[
,两次([^|\]]+)
将|
或]
以外的任何字符中的一个或多个捕获到捕获组1中\|
按字面意思匹配|
\1
将最近捕获的文本与捕获组1匹配]{2}
按字面意思匹配]
,两次答案 2 :(得分:0)
你的问题是使用贪婪的匹配(.*)
(消耗尽可能多)。你应该使用不情愿的匹配(.*?)
(消耗尽可能少):
\[\[(.*?)\|\1\]\]
请参阅live demo。
请注意,您的向前看(?=\|)
无用。