Xml Regex将标记之间的单词大写

Xml Regex将标记之间的单词大写,xml,notepad++,Xml,Notepad++,我在Notepad++中有几个XML文件,其中包含以下两个标记之间的许多名称: <givenName>John</givenName> <surname>Doe</surname> <givenName>Jane</givenName> <surname>Doe</surname> 我需要在两个标记之间转换名称的正则表达式来获得此结果: <givenName>JOHN</give

我在Notepad++中有几个XML文件,其中包含以下两个标记之间的许多名称:

<givenName>John</givenName>
<surname>Doe</surname>

<givenName>Jane</givenName>
<surname>Doe</surname>
我需要在两个标记之间转换名称的正则表达式来获得此结果:

<givenName>JOHN</givenName>
<surname>DOE</surname>

<givenName>JANE</givenName>
<surname>DOE</surname>

我做了很多研究,但我只看到用户试图大写标记后的第一个字母,而不是整个单词的情况。

在regex模式下尝试以下查找和替换:

Find:    <([^>]+)>(.*)<\/\1>
Replace: <$1>\U$2\E</$1>
下面是对正则表达式的解释:

<([^>]+)>   match an opening XML tag, and capture the name in \1 or $1
(.*?)       then match and capture the name inside the tag
<\/\1>       match a closing tag, which agrees with the opening tag

然后,我们使用相同的标记替换,使用\U将名称转换为大写,并使用“\E”终止大写转换,以便结束标记不受影响。

在regex模式下尝试以下查找和替换:

Find:    <([^>]+)>(.*)<\/\1>
Replace: <$1>\U$2\E</$1>
下面是对正则表达式的解释:

<([^>]+)>   match an opening XML tag, and capture the name in \1 or $1
(.*?)       then match and capture the name inside the tag
<\/\1>       match a closing tag, which agrees with the opening tag
然后,我们替换为相同的标记,使用\U将名称转换为大写,并使用“\E”终止大写转换,以便结束标记不受影响

Ctrl+H 找到什么:*>\K\w+= 替换为:\U$2 检查火柴盒 检查环绕 检查正则表达式 全部替换 说明:

给定示例的结果:

屏幕截图:

Ctrl+H 找到什么:*>\K\w+= 替换为:\U$2 检查火柴盒 检查环绕 检查正则表达式 全部替换 说明:

给定示例的结果:

屏幕截图:


为了处理XML,不要使用正则表达式,而是使用XML感知工具。例如,在我碰巧维护的一个工具中,您可以编写

open file.xml ;
for (//givenName/text() | //surname/text())
    set . xsh:uc(.) ;
save :b ;

为了处理XML,不要使用正则表达式,而是使用XML感知工具。例如,在我碰巧维护的一个工具中,您可以编写

open file.xml ;
for (//givenName/text() | //surname/text())
    set . xsh:uc(.) ;
save :b ;

很好,但当标记具有属性时将不起作用。我会用]+。+?>。+?相反,与问题无关的EdgeCase也将替换注释掉的标记,并且如果表示为CDATA,则不会处理名称。若要解决这两个注释,请使用XML解析器,而不是正则表达式。OP没有提到这两种边缘情况。很好,但是当标签有属性时就不起作用了。我会用]+。+?>。+?相反,与问题无关的EdgeCase也将替换注释掉的标记,并且如果表示为CDATA,则不会处理名称。若要解决这两个注释,请使用XML解析器,而不是正则表达式。OP没有提到这两种边缘情况。@choroba OP只提到了两种类型的XML标记,它们都没有任何属性。@Omokocha:不客气,很高兴它有帮助。请随意将答案标记为已接受,@choroba the OP只提到了两种类型的XML标记,它们都没有任何属性。@Omokocha:不客气,很高兴它有帮助。请随意将答案标记为已接受,这比任何基于正则表达式的方法都要好得多。这比任何基于正则表达式的方法都要好得多。