Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以使用正则表达式从文本文件-c#.NET中重复的属性中提取文本_C#_.net_Xml_Regex_String - Fatal编程技术网

是否可以使用正则表达式从文本文件-c#.NET中重复的属性中提取文本

是否可以使用正则表达式从文本文件-c#.NET中重复的属性中提取文本,c#,.net,xml,regex,string,C#,.net,Xml,Regex,String,我目前正在做一些工作,需要从一个大的列表标签中提取一个属性,它们的格式如下: <appid="928" appname="extractapp" supportemail="me@mydomain.com" /><appid="928" appname="extractapp" supportemail="me@mydomain.com" /> 这些标记一个接一个地重复,并且都具有不同的appid、appname和supportemail 我只需要提取所有支持电子邮

我目前正在做一些工作,需要从一个大的列表标签中提取一个属性,它们的格式如下:

<appid="928" appname="extractapp" supportemail="me@mydomain.com" /><appid="928" appname="extractapp" supportemail="me@mydomain.com" />

这些标记一个接一个地重复,并且都具有不同的appid、appname和supportemail

我只需要提取所有支持电子邮件,只提取电子邮件地址,不提取支持电子邮件=

我是否需要使用两个正则表达式语句,一个用于分离每个单独的标记,然后循环遍历结果并取出电子邮件

然后我会浏览并将电子邮件添加到列表中,然后循环浏览列表并将每个电子邮件写入一个txt文件,后面加一个逗号

我从来没有用过太多的正则表达式,所以不知道它是否适合上面的情况


我会花更多的时间亲自尝试,但这很紧急。因此,希望有人能提供帮助。

如何修改字符串使其具有正确的xml格式并加载xml以提取supportemail属性的所有值?

您考虑过Linq转换为xml吗

使用

string pattern = "supportemail=\"([^\"]+)";
MatchCollection matches = Regex.Matches(inputString, pattern);
foreach(Match m in matches)
    Console.WriteLine(m.Groups[1].Value);

请看。

使用XML可能更好,但以下是您将使用的正则表达式(如果您需要/希望使用正则表达式来读取XML):

(appid=“(?[^”]+)”appname=“(?[^”]+)”supportemail=“(?[^”]+)”)

您可以将最后一点放在支持电子邮件中,但这将提取您提到的所有属性,并将它们“分组”到每个标记中。

使用正则表达式而不是XML DOM会遇到的问题:

  • 到目前为止发布的所有示例正则表达式在极为常见的情况下都会失败,即属性值由单引号分隔

  • 任何依赖于以特定顺序出现的属性(例如
    appId
    appName
    之前)的正则表达式,如果属性(其顺序对于XML来说无关紧要)以不同于正则表达式预期的顺序出现,则将失败

  • DOM将为您解析实体引用,而正则表达式则不会;如果您使用正则表达式,则必须检查(至少)XML字符Entities
    的返回值

  • 使用正则表达式解析XML和XHTML是一个很好的例子,它可以释放旧的XML和XHTML。这将使你的任务变得相当复杂,因为你将沦为胡言乱语的疯子,然后地球将被吃掉


  • 考虑到这是XML,为什么不使用XmlTextReader呢我同意,XML阅读器应该是您的首选,除非您确实确定输入的格式始终与您发布的方式相同。如果需要使用regexp,一个使用组的regexp就足够了(尽管我不能马上背诵正确的c#语法),我没有想到XML,因为标记在开始时没有名称,只有一个属性列表。即使这不能用它的原始格式完成,我已经看到了一个简单的解决方法。谢谢
    (appid="(?<AppID>[^"]+)" appname="(?<AppName>[^"]+)" supportemail="(?<SupportEmail>[^"]+)")