是否可以记下正则表达式,以便第一个$符号将被替换为(第二个替换为a),第三个替换为()等?如何用偶数位置(和奇数位置)替换字符
例如,串
This is an $example$ of what I want, $ 1+1=2 $ and $ 2+2=4$.
应该成为
This is an (example) of what I want, (1+1=2) and (2+2=4).
是否可以记下正则表达式,以便第一个$符号将被替换为(第二个替换为a),第三个替换为()等?如何用偶数位置(和奇数位置)替换字符
例如,串
This is an $example$ of what I want, $ 1+1=2 $ and $ 2+2=4$.
应该成为
This is an (example) of what I want, (1+1=2) and (2+2=4).
排序的间接解决办法,但在某些语言中,你可以使用callback function为repla水泥。然后,您可以循环执行该功能中的选项。这也可以用于两个以上的选项。例如,在Python:
>>> text = "This is an $example$ of what I want, $ 1+1=2 $ and $ 2+2=4$."
>>> options = itertools.cycle(["(", ")"])
>>> re.sub(r"\$", lambda m: next(options), text)
'This is an (example) of what I want, (1+1=2) and (2+2=4).'
或者,如果这些总是成对出现的,因为它似乎是在你的榜样的情况下,你可以匹配之间既$
和一切,然后更换$
和重用之间的东西使用组参考\1
;但同样,并非所有的语言都支持那些:
>>> re.sub(r"\$(.*?)\$", r"(\1)", text)
'This is an (example) of what I want, (1+1=2) and (2+2=4).'
在R,你可以使用str_replace函数,它只是取代了第一场比赛,和一个while循环来处理在同一时间对比赛的。
# For str_*
library(stringr)
# For the pipes
library(magrittr)
str <- "asdfasdf $asdfa$ asdfasdf $asdf$ adsfasdf$asdf$"
while(any(str_detect(str, "\\$"))) {
str <- str %>%
str_replace("\\$", "(") %>%
str_replace("\\$", ")")
}
这不是最有效的解决方案,可能的,但它会经过,并贯穿整个字符串(和)代替$。
这是什么语言?我假设这里的'str_replace'只会替换它找到的第一个实例?您可能想要添加该信息。 –
对不起,认为这被标记为R.更新。 –
在JavaScript:
function replace$(str) {
let first = false;
return str.replace(/\$/, _ => (first = !first) ? '(' : ')');
}
据此间https://stackoverflow.com/a/13947249/6332575在Ruby中已经张贴解答,您可以使用
yourstring.gsub( “$”)with_index(1){| _,我|。 i.odd? ? “(”:“)”}
编号正则表达式用于查找模式(带有全局标志的一个或多个),而不是一个字符的第n个出现。你将不得不指定周围在这里应用一个有用的正则表达式(例如,直接在数字之前/之后的每个“$”)。您最好使用索引函数来查找某个字符所在的所有索引。 –
请添加语言标签。 – 2017-06-03 17:34:45