【发布时间】:2019-08-11 07:41:59
【问题描述】:
我需要找到一个基于模式的列表并添加或删除其他字符串...
我在一个文件中有一个 xml 的 URL 列表。
在我的文件中,在一行中,我有这个:
"xml" : "SOMESTUFFWEDONOTCARE<node n=\"Group1\" u-l=\"toto.com;tata.com;tutu.com\"></node><node n=\"Group2\" u-l=\"bobo.com;baba.com\"></node><node n=\"Group3\" u-l=\"toto.com;papa.com;pepe.com;pupu.com\"></node>SOMESTUFFWEDONOTCARE"
我的问题:
- 在 Group1 中,我想将“newwebsite.com”添加到我的列表中(在我的列表末尾)
所以u-l=\"toto.com;tata.com;tutu.com\" 变成了u-l=\"toto.com;tata.com;tutu.com;newwebsite.com\"
当然我知道的只有“Group1”和“newwebsite.com”...
- 在 Group3 中,我想从我的列表中删除“toto.com”
所以u-l=\"toto.com;papa.com;pepe.com;pupu.com\" 变成了u-l=\"papa.com;pepe.com;pupu.com\"
它不能从 Group1 中删除“toto.com”,并且我假设我不知道“toto.com”在我的 Group3 列表中的位置(位置 1 到 N 可能)。
解决方案可以是 perl 代码(作为文件处理程序处理文件)或 perl 代码中的“sed”(直接处理文件)。 我不想将 xml 放入哈希中并对其进行处理(我已经尝试过,基本上它可以工作,但是当我们再次将所有内容放入文件时,它会变得一团糟,因为重音字符、换行符或非 utf-8字符,输出永远不会匹配输入...
【问题讨论】:
-
看起来像 JSON,里面有 XML。如果这是真的,在 Perl 中使用 JSON 和 XML 模块应该会对你有很大帮助。
-
我知道(正如我所说,我可以使用 perl 模块对所有内容进行排序,但特殊字符总是会修改输出,这就是我想处理全局文件的原因)。
-
如果您正确使用 XML 和 JSON 解析器,这应该相对简单,正如 choroba 所说。
-
我没有提到它,但是 json 文件很大(几 MBytes),其中的 xml 字符串包含数千个条目。我将不得不解析所有文件并重新创建一个新文件(使用完全相同的语法)......我看不出它比正则表达式更简单(对于比我更了解正则表达式的人)。而且我仍然确认非 utf-8 字符在您阅读和编写它们时真的很痛苦
-
如果 XML 数据是真正的 XML,而不是类似于 XML 的东西,那么当它返回时,它仍然意味着相同的东西。 JSON 也是如此。我的经验告诉我,XML 位比 JSON 位更受关注。您最好使用两个解析器的组合,但您至少必须通过 JSON 解析器运行它才能得到所有转义。