2015-05-08 5 views

ответ

1

Ответ находится в вашем вопросе. Хотя for each next чище и может быть быстрее. Затем добавьте в словарь скриптов. Ключи уникальны, поэтому они будут ошибочными, если уже в словаре.

Set Dict = CreateObject("Scripting.Dictionary") 
On Error Resume Next 
For each line in AllMatches 
    Dict.Add Line, "" 
    If Err.Number <> 0 then err.clear 
Next  

For Each thing in Dict.Keys() 
    Outp.writeline thing 
Next 
0

Вы можете использовать группу захвата вокруг матча и использовать обратную ссылку в негативном режиме поиска.

Предположите, мы хотим, чтобы у вас были уникальные 3-значные группы от 123 456 789 123 456 789: 123, и 789. Нам нужно разместить [0-9]{3} в группу захвата, такую ​​как ([0-9]{3}), а затем проверить, нет ли повторения этой захваченной группы позже в строке. Итак, мы только фиксируем последнюю дублирующуюся группу.

([0-9]{3})(?!.*?\1.*$) 

Пример кода VBA:

Sub REGEXP_TEST_UNIQUE() 

Dim strPattern As String 
Dim strInput As String 
Dim regEx As New RegExp 
Dim objMatches As MatchCollection 

strInput = "123 456 789 123 456 789" 
strPattern = "([0-9]{3})(?!.*?\1.*$)" 

With regEx 
    .Global = True 
    .Pattern = strPattern 
End With 

If regEx.test(strInput) Then 
    Set objMatches = regEx.Execute(strInput) 
    For i = 0 To objMatches.Count - 1 
     Range("A2").Value = Range("A2").Value + " + " + objMatches.Item(i) 
    Next 
End If 

End Sub 

значение ячейки "A2" становится:

123 + 456 + 789 
0

использует словарь, но без ненужной обработки ошибок

Sub recut() 
allMatches = Array("apple", "bannana", "apple", "pear") 
Set objdict = CreateObject("Scripting.Dictionary") 
For Each objmatch In allMatches 
    If Not objdict.exists(objmatch) Then objdict.Add objmatch, 1 
Next 
End Sub 
Смежные вопросы