在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节点但不会破坏文本。
答案 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)