【问题标题】:Insert elements (strings) within existing XML tags using a RegEX?使用 RegEX 在现有 XML 标记中插入元素(字符串)?
【发布时间】:2012-03-22 14:16:49
【问题描述】:

在现有标签中插入属性(字符串)。

我需要将在<pagenum><pagenum/> 中找到的数字插入到id=属性中,所以在本例中。

我开始:

<pagenum page="normal" id="page">1<pagenum/>

我需要将其替换为:

<pagenum page="normal" id="page1">1<pagenum/>

其中的字符串可以是任何字母数字值。

这个正则表达式会是什么样子? 像这样?

/s/<pagenum page="normal" id="page">1<pagenum//>/<pagenum page="normal" id="page"{Value}>1\<pagenum/>

我的反向引用太生疏了...

【问题讨论】:

  • 确实,我错过了一些引述...他们现在在里面...

标签: xml regex tags sed markup


【解决方案1】:
  • 我将正则表达式分隔符从 / 更改为 !少一点混乱)
  • 要转义字符,请使用反斜杠而不是正斜杠

试试:

s!(<pagenum page="normal" id=")([a-z0-9_-]+)(">)([0-9]+)(<pagenum/>)!\1\2\4\3\4\5!i

例如:

echo '<pagenum page="normal" id="page">1<pagenum/>' | \
sed -r 's!(<pagenum page="normal" id=")([a-z0-9_-]+)(">)([0-9]+)(<pagenum/>)!\1\2\4\3\4\5!i'

注意 - 结束标签通常不是 &lt;/pagenum&gt; 而不是 &lt;pagenum/&gt;

【讨论】:

  • 其实应该读作echo '&lt;pagenum page="normal" id="page"&gt;1&lt;/pagenum&gt;' | \ sed -E 's!(&lt;pagenum page="normal" id=")([a-z0-9_-]+)("&gt;)([0-9]+)(&lt;/pagenum&gt;)!\1\2\4\3\4\5!g' 表达式是扩展的,需要是全局的。我已经解决了我的斜线噩梦。再次感谢。
  • 啊,你在 Mac 上(BSD sed 有 -E,GNU sed 有 -r)。
  • 确实如此。我使用 Linux 足以知道其中的区别。我猜我总是可以在 Mac 上安装 GNU sed 对吧?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-23
  • 2017-08-11
  • 2017-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多