假设我想拥有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" />
答案 0 :(得分:148)
不确定正则表达式,但有一种方法可以在Notepad ++中执行此操作,尽管它不是很灵活。
在您提供的示例中,按住Alt
并选择您要更改的数字列。然后转到Edit->Column Editor
并在出现的窗口中选择Number to Insert
单选按钮。然后指定您的初始数字和增量,然后单击“确定”。它应该写出递增的数字。
注意:这也适用于Multi-editing
功能(在按住 Ctrl 键的同时选择多个位置)。
答案 1 :(得分:14)
我今天正在寻找相同的功能,但在Notepad ++中无法做到这一点。但是,我们有TextPad来救援。它对我有用。
在TextPad的替换对话框中,启用正则表达式;然后你可以尝试替换
<row id="1"/>
通过
<row id="\i"/>
查看此链接,了解TextPad的更多惊人替换功能 - http://sublimetext.userecho.com/topic/106519-generate-a-sequence-of-numbers-increment-replace/
答案 2 :(得分: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 | " /> |
明显的东西,但它可以帮助某人做奇怪的一次性黑客工作,以节省一些关键的笔画。
答案 3 :(得分:4)
http://docs.notepad-plus-plus.org/index.php/Inserting_Variable_Text
Notepad ++配备了编辑 - &gt;列“Alt + C”编辑器,可以通过两种不同的方式处理矩形选择:Coledit.png 在插入点(也称为插入符号)的列上的每一行(包括当前行)上插入一些固定文本。最初选择的文本保持不变。 如图所示,可以以相同的方式插入一系列线性数字。将提供起始值和增量。使用零填充左边填充是一个选项,可以在基数2,8,10或16中输入数字 - 这也是计算值的显示方式,填充基于最大值。
答案 4 :(得分:3)
上述建议的解决方案仅在数据对齐时才有效。
使用PythonScript Notepad ++插件查看链接中的解决方案,它非常棒!
答案 5 :(得分:3)
我遇到了超过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
恭喜你这样做了:)
答案 6 :(得分:2)
(发布以防有人可能使用它)。
我一直在寻找一个比OP更复杂的问题的解决方案 - 用数字递增的数字替换每个出现的数字
E.g。替换这样的东西:
<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"
答案 7 :(得分: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 > result.txt
将$ tmp存储在文件中。这不需要数据列。