Ruby 如何删除&#x2002&#x2014–我的XML文件中的特殊字符

Ruby 如何删除&#x2002&#x2014&#x2013;我的XML文件中的特殊字符,ruby,xml,regex,parsing,Ruby,Xml,Regex,Parsing,这是xml文件的一个示例 <row tnote="0"> <entry namest="col2" nameend="col4" us="none" emph="bld"><blst> <li><text>Single, head of household, or qualifying widow(er)&#x2014;$55,000</text></li> <li><text>M

这是xml文件的一个示例

<row tnote="0">
<entry namest="col2" nameend="col4" us="none" emph="bld"><blst>
<li><text>Single, head of household, or qualifying widow(er)&#x2014;$55,000</text></li>
<li><text>Married filing jointly&#x2014;$115,000</text></li>
</blst></entry>
<entry colname="col6" ldr="1" valign="middle">&#x2002;</entry>
<entry colname="col7" valign="middle"> 5.</entry>
</row>

但是它似乎不起作用…我的正则表达式不正确吗?

因为您的正则表达式的格式是
/^…$/
,它将只与整个字符串匹配。您将只跳过完全由一个HTML实体组成的文本。

因为您的正则表达式的格式为
/^…$/
,所以它将只与整个字符串匹配。您将只跳过完全由一个HTML实体组成的文本。

&#x不是实体引用,而是字符引用。对于XML解析器,
与原始字符
-
完全相同,因此,当您通过属性(如
元素.text
)查看XML解析器生成的DOM时,您不会看到任何带有符号的内容,而是一个简单的
-
字符

因此,原则上,您可以将其与正则表达式匹配,比如
/[-- ]/。但是,如果您使用的是Ruby 1.8,您会遇到一个问题,即语言本身不支持Unicode,因此
/[-- ]/
无法正常工作:它将尝试删除UTF-8表示的
-
-
中的每个字节 ,这可能会损坏任何其他字符

为每个目标字符进行简单的字符串替换将正常工作,因为这不需要特殊的字符处理。(当然,如果您在源代码中直接包含
-
这样的字符,您还必须正确地对该脚本进行文件编码,因此可能更容易使用
这样的字符串文字转义。)“\xe2\x80\x94”
&#x...
不是实体引用,而是字符引用。对于XML解析器,
—;
与原始字符
-
完全相同,因此当您通过
元素.text
等属性查看XML解析器生成的DOM时,您将不会看到任何带有符号和的内容,而是simple
-
字符

因此,原则上,您可以将其与正则表达式匹配,比如
/[-- ]/。但是,如果您使用的是Ruby 1.8,您会遇到一个问题,即语言本身不支持Unicode,因此
/[-- ]/
无法正常工作:它将尝试删除UTF-8表示的
-
-
中的每个字节 ,这可能会损坏任何其他字符


对每个目标字符进行简单的字符串替换可以正常工作,因为这不需要特殊的字符处理。(当然,如果您在源代码中直接包含
-
这样的字符,您还必须正确地对该脚本进行文件编码,因此可能更容易使用
这样的字符串文字转义。“\xe2\x80\x94“

这段代码是用什么语言编写的?strip
做什么?不,字符引用不表示实体。相反,实体用于表示字符引用。
是实体引用,名为mdash的实体表示值
&
(请参阅)因此,实体引用
&mdash;
引用了字符引用
&8212;
,该字符引用了Unicode字符U+2014。@Gumbo:
U+nnnn
符号使用十六进制数,而不是十进制:
U+2014
@Alan Moore:啊,当然有。这段代码是用什么语言编写的?strip
的功能是什么?不,chara字符引用不表示实体。相反,实体用于表示字符引用。
是一个实体引用,名为mdash的实体表示值
&8212;
(请参阅)。因此实体引用
&mdash;
引用了字符引用
&8212;
,该字符引用了Unicode字符U+2014。@Gumbo:
U+nnnn
符号使用十六进制数,而不是十进制:
U+2014
。@Alan Moore:啊,是的,当然有。
if e.text.strip =~ /^&#x20[0-9][0-9];$/ then
next
else
subLines << e.text
end