使用C#

时间:2015-07-06 11:19:32

标签: c# regex parsing tags vcf

我在VCF文件中有非常多的记录,问题是当手机导出时,它添加了带有标记名称的文件。“PHOTO”,当我将这个VCF文件导入到其他手机时,它将该信息附加到名称中字段,导致太长和大的联系人姓名, 我做的一件事是手动查找和删除,但在一个有25000多行的文件中,这很难,

我正在考虑使用REGX并删除,但也有问题,对于某些记录,PHOTO Tag是最后记录然后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

我想将所有从PHOTO删除到BhJb(在电话之前)

可能的格式。

  • PHOTO ....
  • 电话;

  • ... PHOTO

  • EMAIL;

  • ... PHOTO

  • END:VCARD

1 个答案:

答案 0 :(得分:1)

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

  • 获取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);

或者我认为您可以使用返回键值对列表的方法:

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..");

enter image description here

enter image description here