2017-10-31 14 views
0

Imageは私が右に半角ダッシュの内容を見つけたい

私は2つのデータセットがありますの

1977, 74, 5716-5720, doi:10413454 
1967, 8, 8323, doi:10413454 

私は第2のグループを入れたい、無ダッシュENこのセットを黄色でマークされたデータ。私は正規表現を使用します\d{4}, \d+, \d+(?!-)

しかし、これは動作しません。どこが間違っていますか?

Sub Yellow() 
    Dim p As Paragraph, d As Document, reg As Object 
    Set d = ActiveDocument 
    Set reg = CreateObject("VBscript.Regexp") 
    reg.IgnoreCase = False 
    reg.Global = True 
    reg.Pattern = "\d{4}, \d+, \d+(?!-)" 
    For Each p In d.Paragraphs 
     If reg.Execute(p.Range.Text).count = 1 Then 
      m = reg.Execute(p.Range.Text)(0).FirstIndex 
      n = reg.Execute(p.Range.Text)(0).Length 
      With d.Range(p.Range.Start + m + 9, p.Range.Start + m + n)  
       .HighlightColorIndex = wdYellow 
       End With 
       End If  
     Next 
End Sub 
+0

、あなたがいずれかを投稿していなかったので。 ...赤い印がついているものは何もありません。提出した投稿を本当に確認してください。 – jsotola

+0

@jsotola、申し訳ありませんが、私はすでに私のコードと画像を掲載しています。 –

+0

ソースとターゲットのデータ形式をここに表示する必要があります。 [RegularExpression101](https://regex101.com/r/jA9rH9/1)を試してください。 –

答えて

0

入力

1977, 74, 5716-5720, doi:10413454 

1977, 74, 571と一致する\d{4}, \d+, \d+(?!-)あなたの正規表現に適用されます。

使用word boundary anchorsは番号が常にその全体が一致していることを確実にするために:あなたのVBAコードと間違っているものを伝える方法はありません

\b\d{4}, \d+, \d+\b(?!-) 
+0

あなたの助けていただきありがとうございます。境界は私にとって非常に有用で、私は学びます。私は既にこの問題を解決するためにワイルドカードを使用しています。 –

0
Sub Yellow() 
With selection.Find 
    .Text = "[0-9]{4}, [0-9]{1,}, [0-9]{1,}" 
    .MatchWildcards = True 
    .ClearFormatting 
    .Forward = True 
    .Wrap = wdFindContinue 
    Do 
     .Execute 
     If .Found And selection.Range.Next(wdCharacter, 1) <> "" & ChrW(8211) & "" Then 
     selection.Range.HighlightColorIndex = wdYellow 
     End If 
     If Not .Found Then 
     Exit Do 
     End If 
     Loop 
     End With 


End Sub 
関連する問題