1

ワイルドカードを使用した検索と置換を使用して、VBA で置換を記録しようとしています。

「通常」のように、3 つの空白の後に通常の単語が続く文字列があり、先頭の 3 つの空白を「1」(1 の後に 2 つの空白が続く) で置き換えたいと考えています。青いフォントの「1」です。

与える:「1通常」、1は青で、「通常」は元の形式..

私は一致しようとしました:

([^s]{3})normal

しかし、新しいフォーマットに置き換えると、常に文字列全体が再フォーマットされます..文字列「通常」の元のフォーマットを保持する方法

おそらくVBAを使用してすぐに何かポインタはありますか?

4

2 に答える 2

1

私はやりたいことができました。ただし、私は正規表現を使用していません。もっとエレガントな方法があると思います (必要な場所に到達するために 2 つの置換を行います)。キーワードは「ルックアラウンド」だと思いますが、それを適用することはできませんでした。

Sub replace_3spaces()

Dim str_after As String
Dim re_number As Integer

str_after = "normal"
re_number = "1"

    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "([^s]{3})" & "(" & str_after & ")"
        .Replacement.Text = "§§§\2"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = True
    End With
    Selection.Find.Execute Replace:=wdReplaceAll

    Selection.Find.ClearFormatting
    Selection.Find.Replacement.Font.ColorIndex = wdBlue
    With Selection.Find
        .Text = "§§§"
        .Replacement.Text = re_number & " "
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = True
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
End Sub
于 2012-11-21T21:24:32.207 に答える
0

regex代わりにこれを使用してください:^ {3}(normal.*)

^          # Matched the start of the string
 {3}       # Followed by 3 spaces
(normal.*) # Followed by normal + anything else (captured)

テスト済みsed:

$ cat file.txt
   normal string 
no spaces 
  two spaces
   another normal string

$ sed -E 's/^ {3}(normal.*)/1  \1/' file.txt
1  normal string 
no spaces 
  two spaces
another normal string
于 2012-11-21T10:31:06.853 に答える