查找和替换的问题
Problems with finding and replacing
嘿 Whosebug 社区。我需要帮助处理大量信息文件。是否可以使用正则表达式在此标记中找到:
<category_name><![CDATA[Prekiniai ženklai>Adler|Kita buitinė technika>Buičiai naudingi prietaisai|Kita buitinė technika>Lygintuvai]]></category_name>
以某种方式替换所有其他数据,只留下 'Adler' 或 'Lygintuvai'。我正在使用 Altova 来编辑 xml 文件,所以除了查找替换之外我找不到其他方法。我是正则表达式方面的新手。所以我想也许你可以帮助我。
@\<category_name\>.+?gt\;([\w]+?)\|.+?gt;([\w]+?)\]\]\>\<\/category_name\>@i
- Adler
- Lygintuvai
字段可以包含不带空格的字母数字字符。
如果您想修改可接受字符的范围,请将 [\w] 更改为其他内容:
[a-z] - 只有字母
[0-9] - 只有数字
等等
是可以的,但是用正则表达式来处理XML永远不会100%正确(你可以用计算机科学理论来证明),也可能效率很低。例如,Luk 给出的解决方案是不正确的,因为它不允许在 XML 允许的地方使用空格。最好使用 XQuery 或 XSLT,它们都是为这项工作而设计的(并且都在 Altova 中工作)。然后你可以使用XPath表达式来定位你感兴趣的元素或属性节点,你仍然可以使用正则表达式(例如在XPath replace()函数中)来处理文本或属性节点的内容。
顺便说一句,您的输入很奇怪,因为它在 CDATA 部分中使用了转义序列,例如 >
;但是 XML 转义序列在 CDATA 部分中无法识别。
嘿 Whosebug 社区。我需要帮助处理大量信息文件。是否可以使用正则表达式在此标记中找到:
<category_name><![CDATA[Prekiniai ženklai>Adler|Kita buitinė technika>Buičiai naudingi prietaisai|Kita buitinė technika>Lygintuvai]]></category_name>
以某种方式替换所有其他数据,只留下 'Adler' 或 'Lygintuvai'。我正在使用 Altova 来编辑 xml 文件,所以除了查找替换之外我找不到其他方法。我是正则表达式方面的新手。所以我想也许你可以帮助我。
@\<category_name\>.+?gt\;([\w]+?)\|.+?gt;([\w]+?)\]\]\>\<\/category_name\>@i
- Adler
- Lygintuvai
字段可以包含不带空格的字母数字字符。
如果您想修改可接受字符的范围,请将 [\w] 更改为其他内容: [a-z] - 只有字母 [0-9] - 只有数字 等等
是可以的,但是用正则表达式来处理XML永远不会100%正确(你可以用计算机科学理论来证明),也可能效率很低。例如,Luk 给出的解决方案是不正确的,因为它不允许在 XML 允许的地方使用空格。最好使用 XQuery 或 XSLT,它们都是为这项工作而设计的(并且都在 Altova 中工作)。然后你可以使用XPath表达式来定位你感兴趣的元素或属性节点,你仍然可以使用正则表达式(例如在XPath replace()函数中)来处理文本或属性节点的内容。
顺便说一句,您的输入很奇怪,因为它在 CDATA 部分中使用了转义序列,例如 >
;但是 XML 转义序列在 CDATA 部分中无法识别。