【问题标题】:C# Regular expression with HTML tag to Xamarin FormattedString带有 HTML 标记的 C# 正则表达式到 Xamarin FormattedString
【发布时间】:2016-02-01 13:41:39
【问题描述】:

我正在尝试在 Xamarin 表单中显示格式化标签(如果您不熟悉,请不要介意,问题不依赖于此)。给定一个可以包含任何字符和 标记的字符串,我需要创建 FormattedString 对象,其中包含文本范围。比如

Lorem ipsum dolor sit amet, consectetur <b>adipiscing elit</b>. Integer imperdiet massa accumsan turpis ullamcorper tempor. <b>Cras eget erat quis mi sollicitudin vehicula.</b> Sed ac risus mattis.

此文本应转换为这些跨度

  1. Lorem ipsum dolor sit amet, consectetur

  2. 肥胖精英

  3. 。整数 imperdiet massa accumsan turpis ullamcorper tempor。

  4. Cras eget erat quis mi sollicitudin vehicula。

  5. Sed ac risus mattis。

我正在使用以下正则表达式

 private static Regex _formatterRegex = new Regex(@"(?<text>[^<>\\/]+)|(?<bold><b>(?<boldBody>[^<>\\/]*)<\\/b>)");

所以我匹配 SOME TEXT 或任意文本。这里的问题是 标记的“b”也匹配。查看匹配项

只有当它不在 标记内时,我才需要以某种方式匹配任意文本,因此我的匹配集合将不包含 html 标记的 b-s。有任何想法吗?

【问题讨论】:

  • 你能给我一个链接吗?我也不想使用整个 HTML 解析库来解析一个标签。无论如何我想用正则表达式解决这个问题,所以我需要一个正则表达式解决方案。
  • 我建议阅读The Greatest Regex Trick Ever。

标签: c# html regex xamarin


【解决方案1】:

这是我的处理方法:

var text = "Lorem ipsum dolor sit amet, consectetur &lt;b&gt;adipiscing elit&lt;/b&gt;. Integer imperdiet massa accumsan turpis ullamcorper tempor. &lt;b&gt;Cras eget erat quis mi sollicitudin vehicula.&lt;/b&gt; Sed ac risus mattis.";

var regex = new Regex("(?<text>.+?)(?:&.*?;.*?;|$)" );

var matches = regex.Matches( text );

foreach(Match m in matches ){
    Console.WriteLine( "|" + m.Groups["text"].Value.Trim() + "|" );
}

生产:

|Lorem ipsum dolor sit amet, consectetur|
|adipiscing elit|
|. Integer imperdiet massa accumsan turpis ullamcorper tempor.|
|Cras eget erat quis mi sollicitudin vehicula.|
|Sed ac risus mattis.|

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-18
    • 1970-01-01
    • 2011-08-17
    • 1970-01-01
    • 2019-08-30
    • 2015-03-17
    • 1970-01-01
    相关资源
    最近更新 更多