正则表达式替换(as3) - 使用文本查找但不替换

时间:2011-02-03 16:07:04

标签: regex actionscript-3 whitespace

在regexp上遇到麻烦。我的XML文件加载到actionscript会删除所有空格(自动修剪文本)。所以我想用一个单词替换所有SPACE,以便我以后可以在我自己的解析中修复它。

以下是我想要调整标签的示例。

<w:t> </w:t>
<w:t> Test</w:t>
<w:t>Test </w:t>

这是我想要的结果。

<w:t>%SPACE%</w:t>
<w:t>%SPACE%Test</w:t>
<w:t>Test%SPACE%</w:t>

我得到的最接近的结果是<w:t>\s|\s</w:t>

最大的问题是它会更改XML文件中破坏所有内容的所有空间。只会改变w:t节点但不会破坏文本。

4 个答案:

答案 0 :(得分:1)

var reg1 : RegExp = /((?:<w:t>|\G)[^<\s]*+)\s/g;
data = data.replace(reg1, "$1%SPACE%");

(?:<w:t>|\G)表示每场比赛都是在上一场比赛结束后立即从<w:t>代码,开始。由于[^<\s]无法与结束</w:t>标记(或任何其他标记)匹配,因此每个匹配都保证位于<w:t>元素内。

要做到这一点,你需要处理更多问题,例如:

  • \s匹配其他几种空格,而不仅仅是' '。是否要将{strong>任何空白字符替换为%SPACE%?或者你知道' '将是这些元素中唯一的空格吗?

  • <w:t>元素中是否还有其他元素(例如<w:t> test <xyz> test </xyz> </w:t>)?如果是这样,正则表达式会变得更复杂,但它仍然可行。

我没有设置测试ActionScript,但这是PHP的一个演示,它使用了引擎盖下的PCRE库,如AS3:
test it on ideone.com

编辑:除了匹配最后一场比赛的位置,\G与输入的开头相匹配,就像\A一样。这不是这里给出的正则表达式的问题,但在ideone演示中它是。那个正则表达式应该是

((?:<w:t>|\G(?!\A))(?:[^<\s]++|<(?!/w:t>))*+)\s

答案 1 :(得分:1)

在ActionScript中使用标准XML类解析XML时,您可以通过将ignoreWhiteSpace属性设置为false来指定不忽略空格。默认设置为true。这将确保保留XML文本节点中的空白。然后你可以用它做任何你想做的事。

XML.ignoreWhiteSpace = false
/* parse your XML here */

这样您就不必使用正则表达式,并且可以使用标准的XML ActionScript解析。

答案 2 :(得分:0)

制定了一个不太好的解决方法。但是,问题是当你逆时针工作时。

我改为替换3次。

var reg1 : RegExp = /<w:t>\s/gm;
data = data.replace(reg1, "<w:t>%DEADSPACE%");

var reg2 :RegExp = /\s<\/w:t>/gm;
data = data.replace(reg2, "%DEADSPACE%</w:t>");

var reg3 :RegExp = /<w:t>\s<\/w:t>/gm;
data = data.replace(reg3, "<w:t>%DEADSPACE%</w:t>");

RegExp,有什么好处。绝对没有(唱歌);)

答案 3 :(得分:0)