标签: replace

在巨大的字符串中替换多个字符串的最快方法

我正在寻找替换大(~1mb)字符串的多个(~500)子串的最快方法.无论我尝试过什么,似乎String.Replace是最快的方式.

我只关心最快的方式.不是代码可读性,可维护性等.我不在乎我是否需要使用不安全的代码或预处理原始字符串.

编辑:评论后我添加了一些细节:

每次替换迭代都会将字符串上的ABC替换为其他字符串(每次替换迭代次数不同).要替换的字符串总是相同的 - ABC将始终是ABC.从不ABD.因此,如果有400.000数千个替换迭代.每次使用相同的字符串 - ABC - 将替换为其他(不同的)字符串.

我可以控制ABC是什么.只要它不影响结果,我可以使它超短或超长.显然,ABC不能打招呼,因为大多数输入字符串中都会出现hello.

输入示例: ABCDABCABCDABCABCDABCABCDABCD

示例替换为字符串: BC

示例替换为字符串: AA, BB, CC, DD, EE (5 iterations)

示例输出:

AAADAAAAAADAAAAAADAAAAAADAAAD
ABBDABBABBDABBABBDABBABBDABBD
ACCDACCACCDACCACCDACCACCDACCD
ADDDADDADDDADDADDDADDADDDADDD
AEEDAEEAEEDAEEAEEDAEEAEEDAEED
Run Code Online (Sandbox Code Playgroud)

平均情况:输入字符串为100-200kb,替换迭代次数为40.000次.最坏的情况:输入字符串是1-2mb,400,000次替换迭代.

我可以做任何事.并行做,不安全等等.我不知道怎么做.重要的是它需要尽可能快.

谢谢

c# string performance replace

27
推荐指数
2
解决办法
2万
查看次数

Oracle:替换字符串中的非数字字符

我在我的数据库中的字段,用户保存的自由形式的电话号码.因此,数据具有各种不同的格式:

  • (地区)nnn-nnnn
  • 区域NNN-NNNN
  • area.nnn.nnnn
  • 等等

我想去掉所有的非数字字符,只是存储的数字,但我无法找到一个简单的方法来做到这一点.是否可以不为每个字符使用一个REPLACE?

replace oracle11g

26
推荐指数
2
解决办法
8万
查看次数

在Vim中使用递增值搜索和替换

可以说我写了一个简单的CSS规则:

.star_10 {
  background: url(stars.png) no-repeat 0 0;
}
Run Code Online (Sandbox Code Playgroud)

我需要10个,所以我复制了9次.

.star_10 {
  background: url(stars.png) no-repeat 0 0;
}
.star_10 {
  background: url(stars.png) no-repeat 0 0;
}
.star_10 {
  background: url(stars.png) no-repeat 0 0;
}
.star_10 {
  background: url(stars.png) no-repeat 0 0;
}
.star_10 {
  background: url(stars.png) no-repeat 0 0;
}
Run Code Online (Sandbox Code Playgroud)

等等

现在我想用增量值更改star_10和0 0,所以它看起来像这样:

.star_10 {
  background: url(stars.png) no-repeat 0 0;
}
.star_9 {
  background: url(stars.png) no-repeat 0 -18px;
}
.star_8 {
  background: url(stars.png) no-repeat 0 -36px; …
Run Code Online (Sandbox Code Playgroud)

vim replace

26
推荐指数
2
解决办法
2万
查看次数

用"和"替换字符串中的最后一个逗号.(目标C)

我在Objective-C中寻找一种好方法,用单词"and"替换字符串中的最后一个逗号.有什么建议?

"红色,绿色,蓝色,黄色"

变

"红色,绿色,蓝色和黄色"

replace objective-c nsstring

26
推荐指数
1
解决办法
6192
查看次数

C# - 没有任何东西替换一个角色

我有一个RichTextBox看起来像这样:

TEXT  NEXT_TEXT  10.505   -174.994 0
TEXT  NEXT_TEXT  100.005  174.994  90 
TEXT  NEXT_TEXT  -10.000  -5.555   180
TEXT  NEXT_TEXT  -500.987 5.123    270
TEXT  NEXT_TEXT  987.123  1.000    180
TEXT  NEXT_TEXT  234.567  200.999  90
Run Code Online (Sandbox Code Playgroud)

我想替换"." 没有任何东西,把它放进ListBox......

所以新文件看起来像这样:

TEXT  NEXT_TEXT  10505   -174994 0
TEXT  NEXT_TEXT  100005  174994  90 
TEXT  NEXT_TEXT  -10000  -5555   180
TEXT  NEXT_TEXT  -500987 5123    270
TEXT  NEXT_TEXT  987123  1000    180
TEXT  NEXT_TEXT  234567  200999  90
Run Code Online (Sandbox Code Playgroud)

我想过将值乘以1000,但我不知道如何正确地对字符串进行匹配计算.

所以下一个想法就是这样做(但这不行):

  // Splits the lines in …
Run Code Online (Sandbox Code Playgroud)

c# replace richtextbox

26
推荐指数
2
解决办法
4万
查看次数

Python列表和for-access访问(在内置列表中查找/替换)

我原本以为Python是一种纯粹的传递引用语言.

来自C/C++我不禁想到内存管理,而且很难把它从我的头脑中解脱出来.因此,我试图从Java的角度来考虑它,并将所有内容都考虑在内,而不是原始内容作为参考传递.

问题:我有一个列表,其中包含一组用户定义类的实例.

如果我使用for-each语法,即:

for member in my_list:
    print(member.str);
Run Code Online (Sandbox Code Playgroud)

是否member相当于对象的实际引用?

它是否相当于:

i = 0
while i < len(my_list):
    print(my_list[i])
    i += 1
Run Code Online (Sandbox Code Playgroud)

我认为不是,因为当我想要替换时,它不起作用,也就是说,这不起作用:

for member in my_list:
    if member == some_other_obj:
        member = some_other_obj
Run Code Online (Sandbox Code Playgroud)

在列表中进行简单的查找和替换.可以在for-each循环中完成,如果是,怎么做?另外,我是否只需要使用随机访问语法(方括号),或者什么都不会工作,我需要删除该条目,并插入一个新条目?即:

i = 0
for member in my_list:
   if member == some_other_obj:
      my_list.remove(i)
      my_list.insert(i, member)
   i += 1
Run Code Online (Sandbox Code Playgroud)

python foreach replace reference list

26
推荐指数
3
解决办法
11万
查看次数

vim:如何将光标下的字符替换为以前被删除的文本(不止一次)?

假设我通过使用视觉选择+猛拉将3个字符"foo"拉入我的剪贴板,即:'vllly'

然后我将光标移动到第5行的另一个角色(让我们称之为这个角色x),我想用之前的东西替换,即foo.

我可以使用'p'在x之后粘贴foo,或者'P'在x之前粘贴foo,但我想用foo 替换 x.

我可以使用'vp'用foo替换x,但这只能工作一次,因为它在我的剪贴板中留下了x.换句话说,如果我移动到下一次出现的x并再次点击vp,它就不会用foo替换它.

当然,我可以通过使用:s/x/foo/gc进行搜索/替换,然后忽略我不想替换的所有x的出现,但这有点单调乏味,特别是当我需要的时候do是替换2或3次出现的x非常接近我的光标但不在同一行上(即:第2,3和7行).

所以目前我正在使用:2,7s/x/foo/gc但是我想知道是否有办法将光标移动到x并点击[在这里插入魔术按钮]以用foo替换它.然后我可以移动到我的下一次出现的x并再次点击[魔术按钮]并且繁荣,它再次用foo替换x.

尽管我很难用这个比喻,想象你输入的是记事本,然后选择3个字符,按Ctrl + c将它们复制到剪贴板中,然后高亮显示x,然后按Ctrl + v将其替换为FOO.然后突出显示另一个x,然后再次按Ctrl + v,依此类推.

我怎么在vim中这样做?

vim replace

26
推荐指数
2
解决办法
3万
查看次数

更换字符串中的多个字符,最快的方法是什么?

我正在导入一些具有多个string字段的记录,从旧数据库到新数据库.它看起来很慢,我怀疑是因为我这样做:

foreach (var oldObj in oldDB)
{
    NewObject newObj = new NewObject();
    newObj.Name = oldObj.Name.Trim().Replace('^', '?').Replace('@', 'Ž').Replace('[', 'Š')
        .Replace(']', '?').Replace('`', 'ž').Replace('}', '?')
        .Replace('~', '?').Replace('{', 'š').Replace('\\', '?');
    newObj.Surname = oldObj.Surname.Trim().Replace('^', '?').Replace('@', 'Ž').Replace('[', 'Š')
        .Replace(']', '?').Replace('`', 'ž').Replace('}', '?')
        .Replace('~', '?').Replace('{', 'š').Replace('\\', '?');
    newObj.Address = oldObj.Address.Trim().Replace('^', '?').Replace('@', 'Ž').Replace('[', 'Š')
        .Replace(']', '?').Replace('`', 'ž').Replace('}', '?')
        .Replace('~', '?').Replace('{', 'š').Replace('\\', '?');
    newObj.Note = oldObj.Note.Trim().Replace('^', '?').Replace('@', 'Ž').Replace('[', 'Š')
        .Replace(']', '?').Replace('`', 'ž').Replace('}', '?')
        .Replace('~', '?').Replace('{', 'š').Replace('\\', '?');
    /*
    ... some processing ...
    */
}
Run Code Online (Sandbox Code Playgroud)

现在,我已经通过网络阅读了一些帖子和文章,我已经看到了很多不同的想法.有人说如果我做正则表达式会更好MatchEvaluator,有人说最好保留原样. …

c# regex string performance replace

26
推荐指数
4
解决办法
2万
查看次数

使用powershell替换CRLF

编者注:根据OP后来的评论来判断,这个问题的要点是: 如何将一个带有CRLF(Windows风格)行结尾的文件转换为PowerShell中的LF-only(Unix风格)文件?

这是我的powershell脚本:

 $original_file ='C:\Users\abc\Desktop\File\abc.txt'
 (Get-Content $original_file) | Foreach-Object {
 $_ -replace "'", "2"`
-replace '2', '3'`
-replace '1', '7'`
-replace '9', ''`
-replace "`r`n",'`n'
} | Set-Content "C:\Users\abc\Desktop\File\abc.txt" -Force
Run Code Online (Sandbox Code Playgroud)

使用此代码,我可以将3替换为2,使用空字符串替换为7和9.我只能使用换行符替换回车换行符.但这不起作用.

powershell replace newline eol

26
推荐指数
3
解决办法
9万
查看次数

批处理脚本,用于在一分钟内查找和替换文本文件中的字符串,用于最大12 MB的文件

我编写了一个批处理脚本来替换文本文件中的字符串.

以下是脚本.

@echo off &setlocal
set "search=%1"
set "replace=%2"
set "textfile=Input.txt"
set "newfile=Output.txt"
(for /f "delims=" %%i in (%textfile%) do (
    set "line=%%i"
    setlocal enabledelayedexpansion
    set "line=!line:%search%=%replace%!"
    echo(!line!
    endlocal
))>"%newfile%"
del %textfile%
rename %newfile%  %textfile%
Run Code Online (Sandbox Code Playgroud)

但对于12MB的文件,它需要接近7分钟.我希望它不到一分钟.我们可以使用find或findstr命令来减少所花费的时间吗?

replace batch-file

26
推荐指数
4
解决办法
18万
查看次数