ndk
. abiFilters
означает, что в окончательный APK будут включены только выбранные архитектуры процессоров родных библиотек.
С другой стороны, splits
. abi
. enable true
] сообщает компилятору сгенерировать отдельные APK для выбранных архитектур.
Это означает, что эти две конфигурации нельзя установить вместе. Таким образом, у вас есть два варианта:
ndk
. abiFilters
. Чем у вас будет несколько (вероятно, намного меньше) APK. Более того, с universalApk true
будет создан универсальный APK со всеми архитектурами (вероятно, намного больше, чем в варианте 1). Затем замените compile
новым ключевым словом implementation
. Я думаю, это ясно из сообщения об ошибке.
Использование регулярного выражения для синтаксического анализа HTML чревато ошибками. HTML не является регулярным языком и, следовательно, не может быть на 100% корректно обработан регулярным выражением. Это всего лишь одна из многих проблем, с которыми вы столкнетесь. Лучший способ - использовать синтаксический анализатор HTML / XML, чтобы сделать это для вас.
Вот ссылка на сообщение в блоге, которое я написал некоторое время назад, в котором содержится более подробная информация об этой проблеме.
Как сказано, вот решение, которое должно решить эту конкретную проблему. Однако это не идеальное решение.
var pattern = @"<(img|a)[^>]*>(?<content>[^<]*)<";
var regex = new Regex(pattern);
var m = regex.Match(sSummary);
if ( m.Success ) {
sResult = m.Groups["content"].Value;
Вы можете использовать уже существующие библиотеки, чтобы отключить теги html. Одним из хороших является библиотека Chilkat C # .
Вот метод расширения, который я создал с помощью простого регулярного выражения, чтобы удалить теги HTML из строки:
/// <summary>
/// Converts an Html string to plain text, and replaces all br tags with line breaks.
/// </summary>
/// <returns></returns>
/// <remarks></remarks>
[Extension()]
public string ToPlainText(string s)
{
s = s.Replace("<br>", Constants.vbCrLf);
s = s.Replace("<br />", Constants.vbCrLf);
s = s.Replace("<br/>", Constants.vbCrLf);
s = Regex.Replace(s, "<[^>]*>", string.Empty);
return s;
}
Надеюсь, что это поможет.
Итак, парсер HTML, о котором все говорят, - это Html Agility Pack .
Если это чистый XHTML, вы также можете использовать System.Xml.Linq.XDocument
или System.Xml.XmlDocument
.
Почему бы не попытаться избежать квантора? htmlString.replaceAll("<\\S*?>", "")
(Это Java, но главное - показать идею)
Чтобы включить это:
'<td>mamma</td><td><strong>papa</strong></td>'
в это:
'mamma papa'
Вам нужно заменить теги пробелами:
.replace(/<[^>]*>/g, ' ')
и уменьшите любые повторяющиеся пробелы в одиночные пробелы:
.replace(/\s{2,}/g, ' ')
, затем обрезайте передние и конечные пробелы с помощью:
.trim();
Смысл в том, что ваша функция удаления тега выглядит следующим образом:
function removeTags(string){
return string.replace(/<[^>]*>/g, ' ')
.replace(/\s{2,}/g, ' ')
.trim();
}
Удалить изображение из строки, используя регулярное выражение в c # (поиск изображения, выполняемый идентификатором изображения)
string PRQ=<td valign=\"top\" style=\"width: 400px;\" align=\"left\"><img id=\"llgo\" src=\"http://test.Logo.png\" alt=\"logo\"></td>
var regex = new Regex("(<img(.+?)id=\"llgo\"(.+?))src=\"([^\"]+)\"");
PRQ = regex.Replace(PRQ, match => match.Groups[1].Value + "");
/<\/?[\w\s]*>|<.+[\W]>/g
Это приведет к удалению всех элементов HTML и оставит текст. Это хорошо работает даже для искаженных HTML-элементов (т. Е. Элементов, которые не имеют закрывающих тегов)
Ссылка и пример (Ex.10)
Вот метод расширения, который я использовал довольно долгое время.
public static class StringExtensions
{
public static string StripHTML(this string htmlString, string htmlPlaceHolder) {
const string pattern = @"<(.|\n)*?>";
string sOut = Regex.Replace(htmlString, pattern, htmlPlaceHolder);
sOut = sOut.Replace(" ", String.Empty);
sOut = sOut.Replace("&", "&");
sOut = sOut.Replace(">", ">");
sOut = sOut.Replace("<", "<");
return sOut;
}
}
может использовать:
Regex.Replace(source, "<[^>]*>", string.Empty);
Чтобы удалить также пробелы между тегами, вы можете использовать следующий метод: комбинация между регулярным выражением и обрезкой для пробелов в начале и конце ввода html:
public static string StripHtml(string inputHTML)
{
const string HTML_MARKUP_REGEX_PATTERN = @"<[^>]+>\s+(?=<)|<[^>]+>";
inputHTML = WebUtility.HtmlDecode(inputHTML).Trim();
string noHTML = Regex.Replace(inputHTML, HTML_MARKUP_REGEX_PATTERN, string.Empty);
return noHTML;
}
Итак, для следующего input:
<p> <strong> <em><span style="text-decoration:underline;background-color:#cc6600;"></span><span style="text-decoration:underline;background-color:#cc6600;color:#663333;"><del> test text </del></span></em></strong></p><p><strong><span style="background-color:#999900;"> test 1 </span></strong></p><p><strong><em><span style="background-color:#333366;"> test 2 </span></em></strong></p><p><strong><em><span style="text-decoration:underline;background-color:#006600;"> test 3 </span></em></strong></p>
Выход будет только текстом без пробелов между тегами html или пробелом до или после html: «test text test 1 test 2 test 3».
Please обратите внимание, что пробелы до test text
взяты из <del> test text </del>
html, а пробел после test 3
- из <em><span style="text-decoration:underline;background-color:#006600;"> test 3 </span></em></strong></p>
html.