Несколько смелых тегов в NSMutableAttributedString с циклом? - PullRequest
0 голосов
/ 22 октября 2018

У меня есть строка, содержащая несколько тегов, и я пытаюсь получить текст внутри жирного шрифта, а затем удаляю теги, выделенные жирным шрифтом, что прекрасно работает, если в нем содержится только один тег.Теперь, когда строка содержит несколько тегов, я пытаюсь зациклить их, но она ловит только первый.Может ли кто-нибудь указать мне правильное направление, что я делаю здесь неправильно?

string descriptionBody = "This is a <b>text</b> with multiple <b>bold</b> tags";
var content = new NSMutableAttributedString(descriptionBody);

int i = 0;
while (i < Regex.Matches(descriptionBody, "<b>").Count) {
    int start = descriptionBody.IndexOf("<b>", StringComparison.Ordinal);
    int end = descriptionBody.IndexOf("</b>", StringComparison.Ordinal);
    int length = end - start;

    var boldFirst = new NSRange(start, 3);
    var boldLast = new NSRange(end, 4);

    StringExtensions.ParseBoldTags(content, 14, start + 3, length - 3);
    content.Replace(boldLast, string.Empty);
    content.Replace(boldFirst, string.Empty);
    i++;
}

1 Ответ

0 голосов
/ 22 октября 2018

Ваши начальные / конечные значения одинаковы для каждого цикла сопоставления.Вы можете использовать Group объект MatchCollection для получения каждого индекса и длины совпадения.

string descriptionBody = "This is a <b>text</b> with multiple <b>bold</b> tags";
var content = new NSMutableAttributedString(descriptionBody);

foreach (Group match in Regex.Matches(descriptionBody, "<b>"))
{
    int start = match.Index;
    int end = match.Index + match.Length;
    var boldEnd = Regex.Matches(descriptionBody.Substring(end), "</b>")[0];
    //~~~
}

Обновление:

Если вашей конечной целью является удаление жирных тегови создайте NSAttributedString без какой-либо разметки, вы можете просто использовать Regex.Replace вместо:

var strippedStr = Regex.Replace(descriptionBody, "<b>|</b>", "");
var content = new NSAttributedString(strippedStr);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...