Notepad++ 和 XML - 替换标签元素中所有单词的首字母并将其大写

Notepad++ 和 XML - 替换标签元素中所有单词的首字母并将其大写

我有一个具有以下结构的 XML 文件:

<id>1</id>
<name>alligator and stingray</name>
...
<id>99999</id>
<name>dolphin with carp</name>

我需要结果:

<id>1</id>
<name>Alligator And Stingray</name>
...
<id>99999</id>
<name>Dolphin With Carp</name>

我使用了这个正则表达式:

 Search: (<name>)(.*)(</name>)
 Replace: \1\u\2\3

我得到的结果:

<id>1</id>
<name>Alligator and stingray</name>
...
<id>99999</id>
<name>dolphin with carp</name>

它只对第一个ID的第一个单词进行大写,其余单词和其他ID上的单词保持不变(仍然是小写)!

我是不是做错什么了?

感谢您的帮助-谢谢。

答案1

  • Ctrl+H
  • 找什么:(?:<name>|\G)\K\b(\w)(\w+\s*)
  • 用。。。来代替:\u$1$2
  • 检查匹配大小写
  • 检查环绕
  • 检查正则表达式
  • Replace all

解释:

(?:<name>|\G)   # non capture group, "<name>" or restart from previous match position
\K              # forget all we have seen until this position
\b              # word boundary
(\w)            # group 1, 1 word character
(\w+\s*)        # group 2, 1 or more word characters followed by optional space

替代品:

\u$1        # uppercase content of group 1 (i.e. the first letter)
$2          # content of group 2 (i.e. the rest of the word)

给定示例的结果:

<id>1</id>
<name>Alligator And Stingray</name>
...
<id>99999</id>
<name>Dolphin With Carp</name>

屏幕截图:

在此处输入图片描述

答案2

尝试这个:

   Find what: ([>\s])([a-z])
Replace with: \1\u\2

>如果前一个字符是空格字符或,则将小写字符更改为大写。

答案3

编辑:使用@Toto 的答案。这个答案不使用非常规语言特性,因此永远无法完全回答问题,尽管它确实解决了有限长度的情况(现在)。


只有当一个块中的单词数达到最大限度时,您尝试执行的操作才有可能<name>...</name>

您当前正则表达式的问题在于,组 \2 适用于示例中标签 () 内的整个文本alligator and stingray,而 \u 仅对紧随其后的字符起作用。

如果节点中的单词数有上限,则可以使用类似于以下的正则表达式:

查找内容:<name>(\w)(\w* ?)(\w?)(\w*? ?)(\w?)(\w*? ?)</name>
替换为:<name>\U\1\E\2\U\3\E\4\U\5\E\6</name>

如果您不知道一个节点中有多少个单词,那么您应该使用 XML 解析器。

相关内容