У нас есть большой файл .vcf, который мы экспортировали с компьютера пользователя Mac.
В результате процесса экспорта контактов был получен один файл .vcf, который объединил все контакты в один файл.Я использовал notepad ++, чтобы заменить все экземпляры «BEGIN:» на «\ nBEGIN:», чтобы я мог спать сегодня вечером.
План состоит в том, чтобы поместить каждое совпадение с моим выражением reg в массив, а затем исключить каждое из них.строка во многих файлах .vcf с уникальным именем
(я планировал добавить строки «BEGIN: VCARD» и «END: VCARD» в начало и конец каждого файла позже.)
это отрывок данных, с которыми мы работаем:
BEGIN:VCARD
VERSION:3.0
PRODID:-//Apple Inc.//Mac OS X 10.13.4//EN
N:;;;;
TEL;type=CELL;type=VOICE;type=pref:+18005555555
UID:3fe8e0-421c-4c6a-bfa-38c75df8c07
X-ABUID:3FE8490-421C-4C6A-B2FA-38C15DF8C07:ABPerson
END:VCARD
BEGIN:VCARD
VERSION:3.0
PRODID:-//Apple Inc.//Mac OS X 10.13.4//EN
N:;<blah@company.org>;;;
FN:<blah@company.org>
item1.EMAIL;type=INTERNET;type=pref:blah@company.org
item1.X-ABLabel:_$!<Other>!$_
UID:5ad596-a879-4c98-9f56-2ef90efe32f
X-ABUD:DB5C20C-6DFC-450F-A752-D57964F6F3A:ABPerson
END:VCARD
...
Я подошел к приведенному ниже коду, но он возвращает только первое совпадение
$String = cat C:\temp\contacts.txt
$Regex = [Regex]::new("(?<=BEGIN:VCARD)(.*?)(?=END:VCARD)")
$Match = $Regex.Match($String)
if($Match.Success)
{
$Match.Value
}
всегдаукажите свой источник
Мне нужно, чтобы он проанализировал всю строку и нашел все совпадения, как этот чувак:
$matches_found = @()
cat myfile.txt | %{
if ($_ -match '(?<=BEGIN:VCARD)(.*?)(?=END:VCARD)'){
$matches_found += $matches[1]
}
}
всегда цитируйте свой источник
но когда я вставляю свое регулярное выражение в этот код, он не находит совпадений