正则表达式只替换XML标记(不是内容)

时间:2011-09-14 10:01:17

标签: regex

首先,我知道您不应该尝试使用正则表达式来修改XML,这是一个特殊情况,我必须这样做而不使用解析器。

我想要这个:

<nicetag_A-B>Teststring X-Y</nicetag_A-B>

看起来像这样:

<nicetag_>Teststring X-Y</nicetag_>

简而言之,我想删除[任何字母] - [任意字母],但只能删除标签,而不是内部的实际内容。

到目前为止这是我的正则表达式:

Regex.Replace(inputString, @"(<.*?[a-zA-Z])\-([a-zA-Z].*?>)", "$1$2");

这个问题是它只适用于上面的例子,如果标签的名称没有A-B,内部内容(X-Y)将被替换。

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

您的示例无效,它仅替换标记中的连字符。

在这里试试

(<[^>]*)[a-zA-Z]\-[a-zA-Z]([^>]*)

并替换为$1$2

online here on Regexr

答案 1 :(得分:0)

您可以尝试[^>\s]*(匹配除>和空格之外的所有内容)而不是.*,以确保您仍然在标记名称中。

答案 2 :(得分:0)

您不能只用[a-zA-Z]-[a-zA-Z]>替换>吗?