miss786 Ответов: 1

Как разобрать строку?


Я пытаюсь разобрать следующую входную строку для приведенной ниже функции my, но постоянно получаю исключение “длина aA не соответствует длине bA".

Я пробовал использовать регулярное выражение для фильтрации, но все еще изо всех сил пытаюсь его разобрать. Любые предложения были бы очень полезны. Спасибо.

String a = Illiquidity option, credit model minted, Pricing service unveiled

string b = <P align=justify>RiskSpan has released a proprietary independent daily pricing service for structured products and mortgage assets. Real-time pricing and can process thousands of securities in virtually minutes, it says.</P><P align=justify>Joe Sturtevant, co-founder and pricing executive at RiskSpan, comments: "We are now pricing bonds in the manner in which a trader would and providing context that streamlines the audit process."</P>, <P align=justify>RiskSpan has released a proprietary independent daily pricing service for structured products and mortgage assets. Real-time pricing and can process thousands of securities in virtually minutes, it says.</P><P align=justify>Joe Sturtevant, co-founder and pricing executive at RiskSpan, comments: "We are now pricing bonds in the manner in which a trader would and providing context that streamlines the audit process."</P>


Что я уже пробовал:

   string a = testtitle();
   string b = testStory();

    string c = "";
    string results = "";

    string[] aA = a.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);

   // Regex rgxPTag = new Regex("(<p>.*?<\\/p>)");
    Regex rgxPTag = new Regex("(<p>.*?<\\/p>)", RegexOptions.Singleline);
    string[] bA = rgxPTag.Matches(b).Cast<match>().Select(m => m.Groups[1].Value).ToArray();

    if (aA.Length == bA.Length)
    {

        for (int i = 0; i < aA.Length; i++)
        {
            DateTime dt = DateTime.Today;

            XDocument doc = new XDocument(
       new XDeclaration("1.0", "gb2312", string.Empty),
       new XElement("article",
           new XElement("status", "Approved"),
            new XElement("title", aA[i].ToString()),
             new XElement("subtitle", aA[i].ToString()),
              new XElement("synopsis", bA[i].ToString() + "..."),
               new XElement("url", c),
                new XElement("display_date", dt.ToShortDateString())
         ));
             results  = results  + Environment.NewLine + doc.ToString();

        }
        return results;
    }
    return "Length of aA isnt matching length of bA";


}

Tomas Takac

Ваше регулярное выражение неверно. В вашем тексте есть атрибут align=justify, который вы опускаете из своего регулярного выражения. Кроме того, регулярное выражение по умолчанию чувствительно к регистру. И последнее, но не менее важное: b, c, aA, bA-это не очень хорошие имена переменных.

RickZeeland

Может быть, вам стоит использовать:
новое регулярное выражение ("(< P.*?\\ / p>)", RegexOptions.Однострочный);

Matt T Heffron

Даже если вы исправите регулярное выражение, как было предложено, в приведенном вами примере будет aA с 3 элементами и bA с 4.
Чего вы на самом деле пытаетесь достичь?
(КСТАТИ. Все это .ToString() из aA[i] и bA[i] бессмысленны, значения уже являются строками!)

1 Ответов

Рейтинг:
2

Patrice T

Цитата:
"Длина АА не соответствует длине ба".
Это сообщение исходит из вашего собственного кода, оно просто означает, что
if (aA.Length == bA.Length)

Неудачный.
Вы единственный, кто знает, почему этот тест здесь и что он означает.

Используйте отладчик, чтобы увидеть, что делает ваш код.


Afzaal Ahmad Zeeshan

5ед.

Patrice T

Спасибо