У меня есть строка, содержащая несколько тегов, и я пытаюсь выделить текст жирным шрифтом, а затем удалить жирные теги, что отлично работает, если он содержит только один тег. Теперь, когда строка содержит несколько тегов, я пытаюсь зациклить их, но он ловит только первый. Может ли кто-нибудь указать мне правильное направление, что я здесь делаю неправильно?
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++;
}
Это была моя первая идея, но если я разбираю ее в HTML в iOS, она идет с новым римским шрифтом Times, важно анализировать только полужирные теги.
Какое отношение имеет синтаксический анализ HTML к iOS или шрифтам?
AngleSharp - гораздо лучший инструмент для синтаксического анализа HTML.





Ваши начальные и конечные значения одинаковы для каждого цикла сопоставления. Вы можете использовать объект 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);
Этот код выделяет жирным шрифтом только теги <b>, но не текст внутри этих тегов.
@Jan Вам просто нужно выделить следующее завершающее жирным шрифтом совпадение, я добавил еще одно совпадение в свой пример, чтобы помочь.
Я действительно запутался здесь, лол, я думаю, мне нужно еще кофе
@Jan Смотрите мое обновление, это все, что вы пытаетесь сделать?
Нет, текст также должен быть полужирным между ними, иначе в нем нет смысла.
@Jan Ваш код просто заменяет теги на string.Empty.
Я бы не советовал попытка разобрать HTML с помощью RegEx.