使用 C# 删除 VCF 文件中的特定标签

Removing A specific Tag in VCF file using C#

我在 VCF 文件中有大量记录,问题是当 Phone 导出时,它添加了标签名称为 ."PHOTO" 的文件,当我将此 VCF 文件导入其他文件时phone,它将信息附加到姓名字段中,导致联系人姓名过长和过大, 我正在做的一件事是手动查找和删除,但是在一个有 25000 多行的文件中它是如此困难,

我正在考虑使用 REGX 移动并删除,但也有问题,对于某些记录,PHOTO 标签是最后的记录,然后 END:VCARD 在某些点 ITS,TEL;..

这是我的样本,只有一个线索,然后休息我会自己尝试。

public string RemoveBlockComments(string InputString)
{
   string strRegex = @"<regx>";
   RegexOptions myRegexOptions = RegexOptions.Multiline;
   Regex myRegex = new Regex(strRegex, myRegexOptions);
   return myRegex.Replace(strTargetString, "");
}

这是测试数据:

PHOTO;TYPE=PNG;ENCODING=B:/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgMCAgMDAwMoHBwYIDAoMDAsK
CwsNDhIQDQ4KL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx
BhJB
TEL;TYPE=CELL:123456789

我想将照片中的所有内容删除到 BhJb(电话前)

可能的格式。

根据我们的聊天讨论,您似乎需要做两件事:

  • 获取 TELEMAILEND 之后的文本(或有效值列表中的任何其他内容)
  • 获取PHOTO开头的部分。

您可以使用 updated method:

轻松获得这 2 个值
private static String ReFormat(String str, out String removed) 
{
    Regex rgx = new Regex(@"(?msi)(?<removed>PHOTO\b.*?)(?=\b(?:TEL|EMAIL|END)\b)");
    removed = rgx.Match(str).Groups["removed"].Value;
    return str.Replace(removed, string.Empty); 
}

在调用者中:

string removed = string.Empty;
string rest = ReFormat("PHOTO;TYPE=PNG;ENCODING=B:/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgMCAgMDAwMoHBwYIDAoMDAsK\r\nCwsNDhIQDQ4KL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx\r\nBhJB\r\nTEL;TYPE=CELL:123456789", out removed);

或者我认为您可以使用一种方法 returns 键值对列表:

private static List<KeyValuePair<String, String>> ReFormat(String str) 
{
    return Regex.Matches(str, @"(?msi)(?<photo>PHOTO\b.*?)(?<tel>\b(?:TEL|EMAIL|END)\b.*?(?=\bPHOTO|$))").Cast<Match>().Select(p=> new KeyValuePair<String, String>(p.Groups["photo"].Value, p.Groups["tel"].Value)).ToList();
} 

然后

var my_result = ReFormat("PHOTO;TYPE=PNG;ENCODING=B:/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgMCAgMDAwMoHBwYIDAoMDAsK\r\nCwsNDhIQDQ4KL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx\r\nBhJB\r\nTEL;TYPE=CELL:123456789");
var mres1 = ReFormat("PHOTO;..jkh ohfhlahflkhasf fhasof\r\nTel:886886\r\ndataPHOTO:.ljlljhkdsghdsgd\n\rEmail:abc@abc.com..");