我只想用任何可能的字符串创建一个正则表达式.
var usersString = "Hello?!*`~World()[]";
var expression = new RegExp(RegExp.escape(usersString))
var matches = "Hello".match(expression);
Run Code Online (Sandbox Code Playgroud)
有内置的方法吗?如果没有,人们会用什么?Ruby有RegExp.escape.我觉得我不需要自己编写,那里必须有标准的东西.谢谢!
我最近一直在gsub广泛使用,我注意到短模式比长模式运行得更快,这并不奇怪.这是一个完全可重现的代码:
library(microbenchmark)
set.seed(12345)
n = 0
rpt = seq(20, 1461, 20)
msecFF = numeric(length(rpt))
msecFT = numeric(length(rpt))
inp = rep("aaaaaaaaaa",15000)
for (i in rpt) {
n = n + 1
print(n)
patt = paste(rep("a", rpt[n]), collapse = "")
#time = microbenchmark(func(count[1:10000,12], patt, "b"), times = 10)
timeFF = microbenchmark(gsub(patt, "b", inp, fixed=F), times = 10)
msecFF[n] = mean(timeFF$time)/1000000.
timeFT = microbenchmark(gsub(patt, "b", inp, fixed=T), times = 10)
msecFT[n] = mean(timeFT$time)/1000000.
}
library(ggplot2)
library(grid)
library(gridExtra)
axis(1,at=seq(0,1000,200),labels=T)
p1 = qplot(rpt, …Run Code Online (Sandbox Code Playgroud) 我有一组我需要替换的字符串,但我需要保留字母的大小写.输入字和输出字的长度相同.
例如,如果我需要用"qwer"替换"abcd",那么应该发生以下情况:
"AbcD" translates to "QweR"
"abCd" translates to "qwEr"
Run Code Online (Sandbox Code Playgroud)
等等.
现在我正在使用JavaScript replace,但大写字母在翻译时丢失了.
r = new RegExp( "(" + 'asdf' + ")" , 'gi' );
"oooAsdFoooo".replace(r, "qwer");
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激.
我有一组我需要用来替换的句子,例如:
abc => cde
ab df => de
...
Run Code Online (Sandbox Code Playgroud)
我有一个文本在哪里进行更改.但是我无法预先知道所述文本的情况.所以,例如,如果我有:
A bgt abc hyi. Abc Ab df h
Run Code Online (Sandbox Code Playgroud)
我必须更换并获得:
A bgt cde nyi. Cde De h
Run Code Online (Sandbox Code Playgroud)
或尽可能接近,即保持情况
编辑:因为我看到很多混乱,我会尝试澄清一点:
我问的是一种在更换之后保留帽子的方法,我不认为它通过了很好(没有很好地解释什么是thaat)所以我将使用真实的单词给出一个更现实的例子.
把它想象成一个gossary,用它们的正义代替表达式,所以如果我映射:
didn't achieve success => failled miserably
Run Code Online (Sandbox Code Playgroud)
然后我得到了作为输入的句子:
As he didn't achieve success, he was fired
Run Code Online (Sandbox Code Playgroud)
我会的
As he failled miserably, he was fired
Run Code Online (Sandbox Code Playgroud)
但是如果没有资本化,那么如果实现或成功资本化,那么就会失败,如果有任何超过1个字母的资本化,那么这将是悲惨的
我的主要可能性是(我真正想要考虑的是)
如果我可以处理那些已经可以接受的三个 - 我认为这是更容易的 - 当然如果可以获得更深入的解决方案会更好
有任何想法吗?
如何使用单个正则表达式替换所有单词town并village保留每个匹配的第一个字母的大小写?
输入示例:
Towns are small cities. I live in a town.
Run Code Online (Sandbox Code Playgroud)
期望的输出:
Villages are small cities. I live in a village.
Run Code Online (Sandbox Code Playgroud) 我想在一个由职称组成的数据库中清理大约200万个条目.许多都有几个缩写,我希望改为一个一致且更容易搜索的选项.到目前为止,我只是使用单独的mapply(gsub(...)命令运行列.但是我做了大约80次更改,因此运行需要将近30分钟.必须有一个更好的方法.我是字符串搜索的新手,我找到了*$诀窍,这有助于.有没有办法在一个单独的搜索mapply?我想可能更快?任何帮助都会很棒.谢谢.
以下是一些代码.测试是一个包含200万个人职位的专栏.
test <- mapply(gsub, " Admin ", " Administrator ", test)
test <- mapply(gsub, "Admin ", "Administrator ", test)
test <- mapply(gsub, " Admin*$", " Administrator", test)
test <- mapply(gsub, "Acc ", " Accounting ", test)
test <- mapply(gsub, " Admstr ", " Administrator ", test)
test <- mapply(gsub, " Anlyst ", " Analyst ", test)
test <- mapply(gsub, "Anlyst ", "Analyst ", test)
test <- mapply(gsub, " Asst ", " Assistant ", …Run Code Online (Sandbox Code Playgroud) 给定样本字符串:
tst_str <- c("abc", "123", "klm", "lop")
Run Code Online (Sandbox Code Playgroud)
我想做以下替换:
abc -> za12123 -> poiklm -> uyt简单的嵌套嵌套gsub可以产生以下结果:
gsub(
pattern = "abc",
replacement = "za12",
x = gsub(
pattern = "123",
replacement = "poi",
x = gsub(
pattern = "klm",
replacement = "uyt",
x = tst_str
)
)
)
# [1] "za12" "poi" "uyt" "lop"
Run Code Online (Sandbox Code Playgroud)
我想使用purrr::map*或purrr::reduce函数得出相同的结果.我最初的想法是利用purrr::reduce2
purrr::reduce2(
.x = c("abc", "123", "klm"),
.y = c("za12", "poi", "uyt"),
.f = function(x, y, …Run Code Online (Sandbox Code Playgroud)