我有一个具有以下结构的 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上的单词保持不变(还是小写)!
我做错了什么?
帮助表示赞赏 - 谢谢。
(?:<name>|\G)\K\b(\w)(\w+\s*)
\u$1$2
解释:
替代品:
给定示例的结果:
屏幕截图:
尝试这个:
如果前一个字符是空格字符或 ,这会将小写字符更改为大写字符
>
。编辑:使用@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 解析器。