web-dev-qa-db-ja.com

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
Tần Quảng
  • 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>

スクリーンキャプチャ:

enter image description here

3
Toto

これを試して:

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

前の文字がスペース文字または>の場合、これにより小文字が大文字に変更されます。

1
Freddy

編集:@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>_

1つのノードに含まれる単語の数がわからない場合は、代わりにXMLパーサーを使用する必要があります。

0
chaosflaws