Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在txt/xml文件中查找word/pattern/string并添加增量编号_Python_Xml_Regex_Perl_Increment - Fatal编程技术网

Python 在txt/xml文件中查找word/pattern/string并添加增量编号

Python 在txt/xml文件中查找word/pattern/string并添加增量编号,python,xml,regex,perl,increment,Python,Xml,Regex,Perl,Increment,我用的是Textwrangler,他在为替换项添加数字方面做得不够。 我有一个包含多个字符串的xml文件,其中包含以下文字: generatoritem id="Outline Text" 我需要在每次替换的末尾添加一个递增的数字,如下所示: generatoritem id="Outline Text1" 所以我需要用“大纲文本”和递增的数字替换“大纲文本” 我找到了一个类似问题的答案,并尝试在textwrangler中键入以下内容,然后点击检查语法: perl -ple 's/"Ou

我用的是Textwrangler,他在为替换项添加数字方面做得不够。 我有一个包含多个字符串的xml文件,其中包含以下文字:

generatoritem id="Outline Text"
我需要在每次替换的末尾添加一个递增的数字,如下所示:

generatoritem id="Outline Text1"  
所以我需要用“大纲文本”和递增的数字替换“大纲文本”

我找到了一个类似问题的答案,并尝试在textwrangler中键入以下内容,然后点击检查语法:

perl -ple 's/"Outline Text"/$n++/e' /path/of/file.xml

有很多错误。。所以我需要解释一下这个漂亮的一行。或者获取一个新的脚本或Python脚本?

-p使perl一次读取一行文件,并对每一行执行脚本,然后根据脚本的修改发出该行。请注意,隐式使用了名为$\的变量-它用作保存正在读取的行的变量,也是s///的默认目标,也是每行后面打印的默认源

对于你描述的任务,你不需要-L(L中的L),所以我不会费心去研究它。移除它

最后一个标志-e(在-ple末尾的e)从命令行本身引入了您的“脚本”——即允许在没有源文件的情况下快速、小规模地使用perl

在你的脚本中:对于你描述的目的来说,这是错误的,作为一种尝试,它也有点不安全

如果您想将“大纲文本”更改为其他内容,您当前的脚本将全部替换为$n—这不是您所描述的。一个简单的方法就是完全按照你的要求去做

s/(id="Outline text)(")/$1 . $n++ . $2/eg;
这与您想要的文本完全匹配,请注意,我还匹配了id=,以便在文件的其他部分包含“大纲文本”的情况下获得额外的确定性-不要笑,这可能会发生

通过将()放在模式的各个部分上,这些位被保存在变量$1、$2等中。然后我在替换部分中使用这些位。这个操作员将各部分粘在一起,给出结果

s///末尾的/e意味着替换被视为一个Perl表达式,而不仅仅是一个普通的替换字符串。我还添加了g,这使得它在一行上匹配不止一次-在输入文件中的一行上可能有多个有趣的id=,所以请做好准备


最后一点。您似乎建议从1开始编号,因此将$n++替换为+++$n。对于我建议的更改,变量$n将以空开始(实际上为零),它将递增为1(和2,以及3和……),然后使用它的值。

perl-h
解释了命令行开关。谢谢。我最终还是有点成功了。我正在使用Textwrangler,从那里运行脚本不起作用。甚至不是“在终端中运行”,而是将代码直接粘贴到终端中产生所需的结果,但是在终端内部而不是文件上。我还需要在建议的代码周围添加“'”,并在/path/to/file.xml前面添加一个“/”,例如:
perl-pe的/(id=“Outline Text”)(“”/$1++$n$2/eg;'//path/to/file.xml
Ok。这是因为我没有要求perl使用-w写入文件(?)。我将开头改为
perl-I-w-pe'
,因此立即更改了文件。因此(到目前为止)最简单的解决方案是拖放
perl-i-w-pe的/(id=“Outline Text)(”)/$1++$n$2/eg;'/
输入到终端,然后拖放到源文件中,生成
/path/to/file.xml
,然后按enter键。也许我应该提到,我正在使用Mac(OSX Mavericks),尽管我可以通过perl以某种方式实现这一点,但我发现这并不是那么简单(目前)。Python中有增量函数吗?啊,也许在某种程度上: