Notepad ++逐步替换


83

可以说我想有10行数据,但我想为每行或每条数据增加一个值。如何增加该值?

例如....如果我有这些行,是否有正则表达式替换ID值以递增的方式?

<row id="1" />
<row id="1" />
<row id="1" />
<row id="1" />
<row id="1" />

---这就是我想要的样子...(如果第一行的ID上升,那没关系)

<row id="1" />
<row id="2" />
<row id="3" />
<row id="4" />
<row id="5" />

Notepad ++替代品不会做数学运算,而正则表达式也不会。
琥珀

如果有可能,那就很难了。在正则表达式中没有数字的概念(因此没有+1),并且在匹配正则表达式时没有简单的方法来累积数据(因此没有“下一个”匹配项)。如果您确实需要自动执行此操作,XSLT可能会在这里为您提供帮助。

@Amber Notepad ++具有有限的正则表达式功能。
Karolis 2011年

@Karolis我很清楚。我只是说,正则表达式(固有地)或Notepad ++都不使用该正则表达式进行搜索和替换的实现都支持数学替换。
琥珀

1
尽管提到(并标记了)正则表达式是一种可能的方法,但OP似乎并不关心特定的方法,而只是知道Notepad ++是否可以完成任务...。
jbobbins

Answers:


155

不确定正则表达式,但是虽然它不是很灵活,但是在Notepad ++中有一种方法可以让您执行此操作。

在您给出的示例中,按住Alt并选择要更改的数字列。然后转到Edit->Column EditorNumber to Insert在出现的窗口中选择单选按钮。然后指定您的初始编号和增量,然后单击“确定”。它应该写出递增的数字。

注意:此功能也适用于该Multi-editing功能(在Ctrl按住键的同时选择多个位置)。

但是,这与大多数人认为有用的灵活性相差无几。Notepad ++很棒,但是如果您想要一个真正强大的编辑器,可以轻松地完成这样的事情,我会说使用Vim。


4
+1为隐藏列功能提供了支持,并注意到vim是更强大的编辑器。;)
Spencer Rathbun

Notepad ++很棒,如果我们拥有一个功能强大的在线文本编辑器,那就太好了。
LuizFeijãoVeronesi 2014年

1
对我来说:用Alt + Shift选择列,然后输入要插入的数字。完美运行
Rombus

谢谢!这个功能很棒。同样,我能够通过双击选择该列。
Rahim Khoja

太棒了!在准备300条插入语句时才救了我一命,
DoNuT '18

14

我今天在寻找相同的功能,但在Notepad ++中无法做到这一点。但是,我们有TextPad可以帮助我们。它为我工作。

在TextPad的替换对话框中,打开正则表达式;那么您可以尝试更换

<row id="1"/>

通过

<row id="\i"/>

看看这个链接TextPad的进一步惊人更换功能- http://sublimetext.userecho.com/topic/106519-generate-a-sequence-of-numbers-increment-replace/


1
我想如果我真的注意的话会有所帮助。最终安装了SublimeText。:) 谢谢。
rtf

1
但是请确保您点击“全部替换”按钮。“替换下一个”不会增加计数器。花了几个小时才弄清楚。\ i用从1开始的数字替换,以1为增量。\ i(10)用从10开始的数字替换,以1为增量。\ i(0,10)用从0开始的数字替换,以10为增量。\ i( 100,-10)替换为从100开始的数字,并递减-10。
Venkatesh Muniyandi

8

我有超过250行的相同问题,这是我的处理方式:

例如 :

<row id="1" />
<row id="1" />
<row id="1" />
<row id="1" />
<row id="1" />

您将光标放在“ 1”之后,然后单击alt + shift并从向下箭头开始下降直到到达底行,现在您看到一组选择,单击“擦除”以同时擦除每行上的数字1并转到Edit -> Column Editor并选择Number to Insert然后将其1放在初始编号字段中,并按字段1递增,并检查零数字,然后单击ok

恭喜你做到了:)


5

由于实际答案有限,我将分享此解决方法。对于真的像您的示例这样的简单的情况,您可以反向进行...

由此

1
2
3
4
5

替换\r\n" />\r\n<row id=",您将获得90%的处理率

1" />
<row id="2" />
<row id="3" />
<row id="4" />
<row id="5

或者,您可以使用excel /电子表格破解数据的类似方式。只需将原始数据拆分为列,然后根据需要操作值即可。

|   <row id="   |   1   |   " />    |
|   <row id="   |   1   |   " />    |
|   <row id="   |   1   |   " />    |
|   <row id="   |   1   |   " />    |
|   <row id="   |   1   |   " />    |

显而易见的内容,但是它可以帮助完成奇怪的一次性黑客工作的人节省一些按键。


5
更换(.*)<row id="\1" />在正则表达式模式,而不. matches newline将让你的存在方式100%。
satibel '16

4

http://docs.notepad-plus-plus.org/index.php/Inserting_Variable_Text

Notepad ++配备了“编辑”->“ Alt + C”列编辑器,该编辑器可以通过两种不同的方式处理矩形选择:Coledit.png在插入的列上的每一行(包括当前行)插入一些固定文本点(又称插入号)。最初选择的文本保持不变。如图所示,可以以相同的方式插入线性数字序列。应提供起始值和增量。左填充为零是一个选项,可以在基数2、8、10或16中输入数字-这也是计算值也将显示的方式,填充以最大为基础。


如果您将图像附加在帖子中,以避免混淆而无法读懂您的答案
那就更好了


1

(发布,以防有​​人使用)。

我一直在寻找比OP更复杂的问题的解决方案-用递增的数字用相同的事物替换每次出现的事物

例如,替换如下内容:

<row id="1" />
<row id="2" />
<row id="1" />
<row id="3" />
<row id="1" />

这样:

<row id="2" />
<row id="3" />
<row id="2" />
<row id="4" />
<row id="2" />

无法在线找到解决方案,所以我用groovy编写了自己的脚本(有点难看,但能完成工作):

 /**
 * <p> Finds words that matches template and increases them by 1.
 * '_' in word template represents number.
 *
 * <p> E.g. if template equals 'Row="_"', then:
 * ALL Row=0 will be replaced by Row="1"
 * All Row=1 will be replaced by Row="2"
 * <p> Warning - your find template might not work properly if _ is the last character of it
 * etc.
 * <p> Requirments:
 * - Original text does not contain tepmlate string
 * - Only numbers in non-disrupted sequence are incremented and replaced
 * (i.e. from example below, if Row=4 exists in original text, but Row=3 not, than Row=4 will NOT be 
 * replaced by Row=5)
 */
def replace_inc(String text, int startingIndex, String findTemplate) {
    assert findTemplate.contains('_') : 'search template needs to contain "_" placeholder'
    assert !(findTemplate.replaceFirst('_','').contains('_')) : 'only one "_" placeholder is allowed'
    assert !text.contains('_____') : 'input text should not contain "______" (5 underscores)'
    while (true) {
        findString = findTemplate.replace("_",(startingIndex).toString())
        if (!text.contains(findString)) break;
        replaceString = findTemplate.replace("_", "_____"+(++startingIndex).toString())
        text = text.replaceAll(findString, replaceString)
    }
    return text.replaceAll("_____","") // get rid of '_____' character
}

// input
findTemplate = 'Row="_"'
path = /C:\TEMP\working_copy.txt/
startingIndex = 0

// do stuff
f = new File(path)
outText = replace_inc(f.text,startingIndex,findTemplate)
println "Results \n: " + outText
f.withWriter { out -> out.println outText }
println "Results written to $f"

1

如果将值存储在文件input.txt中,则可以通过regex和foreach循环使用Powershell进行操作:

$initialNum=1; $increment=1; $tmp = Get-Content input.txt | foreach {  $n = [regex]::match($_,'id="(\d+)"').groups[1
].value; if ($n) {$_ -replace "$n", ([int32]$initialNum+$increment); $increment=$increment+1;} else {$_}; }

之后,您可以使用将$ tmp存储在文件中$tmp > result.txt。这不需要数据在列中。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.