从类似字符串C#的xml中提取节点值

时间:2013-07-26 14:13:00

标签: c# regex

我有以下字符串

<ad nameId="\862094\"></ad>

或逗号分隔如下

<ad nameId="\862593\"></ad>,<ad nameId="\862094\"></ad>,<ad nameId="\865599\"></ad>

如何提取nameId值并存储在单个字符串中,如下所示

string extractedValues ="862094";

或者上面用逗号分隔字符串

string extractedMultipleValues ="862593,862094,865599";

这是我开始尝试但不确定的原因

string myString = "<ad nameId="\862593\"></ad>,<ad nameId="\862094\"></ad>,<ad         
                    nameId="\865599\"></ad>";
string[] myStringArray = myString .Split(',');
foreach (string str in myStringArray )
{

   xd.LoadXml(str);
   chkStringVal = xd.SelectSingleNode("/ad/@nameId").Value;
}

4 个答案:

答案 0 :(得分:2)

搜索:

<ad nameId="\\(\d*)\\"><\/ad>

替换为:

$1

请注意,您必须全局搜索。示例:http://www.regex101.com/r/pL2lX1

答案 1 :(得分:1)

试试这个;

string s = @"<ad nameId=""\862094\""></ad>";
if (!(s.Contains(",")))
{

    string extractedValues = s.Substring(s.IndexOf("\\") + 1, s.LastIndexOf("\\") - s.IndexOf("\\") - 1);
}
else
{
    string[] array = s.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
    string extractedMultipleValues = "";
    for (int i = 0; i < array.Length; i++)
    {
         extractedMultipleValues += array[i].Substring(array[i].IndexOf("\\") + 1, array[i].LastIndexOf("\\") - array[i].IndexOf("\\") - 1) + ",";
    }

    Console.WriteLine(extractedMultipleValues.Substring(0, extractedMultipleValues.Length -1));
}

答案 2 :(得分:1)

mhasan,这是一个你需要的例子(差不多)

已编辑:完整代码(这有点棘手)

enter image description here

(对不起图片,但我在编辑器中遇到标签问题,如果你愿意,我可以通过电子邮件发送代码:))

关于代码的一点解释,它取代了给定字符串中parsePattern的所有发生,因此如果给定的字符串有多个用“,”分隔的标记,则最终结果将是以“,”分隔的数字,存储在解析变量中....

希望有所帮助

答案 3 :(得分:1)

请参阅下面的代码以提取示例中的所有数字:

   string value = @"<ad nameId=""\862093\""></ad>,<ad nameId=""\862094\""></ad>,<ad nameId=""\865599\""></ad>";
   var matches = Regex.Matches(value, @"(\\\d*\\)", RegexOptions.RightToLeft);
   foreach (Group item in matches)
   {
     string yourMatchNumber = item.Value;
   }