Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 从字体到跨度(大小和颜色)和背面(VB.NET)的正则表达式_Html_Css_Vb.net_Regex - Fatal编程技术网

Html 从字体到跨度(大小和颜色)和背面(VB.NET)的正则表达式

Html 从字体到跨度(大小和颜色)和背面(VB.NET)的正则表达式,html,css,vb.net,regex,Html,Css,Vb.net,Regex,我正在寻找一个正则表达式,它可以将我的字体标记(仅具有大小和颜色属性)转换为具有相关内联css的跨度标记。如果有帮助的话,这将在VB.NET中完成 我还需要一个正则表达式来实现另一个目的 下面是我正在寻找的转换示例: <font size="10">some text</font> 一些文本 然后成为: <span style="font-size:10px;">some text</span> 一些文本 因此,转换标签并在任何字体大小的末

我正在寻找一个正则表达式,它可以将我的字体标记(仅具有大小和颜色属性)转换为具有相关内联css的跨度标记。如果有帮助的话,这将在VB.NET中完成

我还需要一个正则表达式来实现另一个目的

下面是我正在寻找的转换示例:

<font size="10">some text</font>
一些文本
然后成为:

<span style="font-size:10px;">some text</span>
一些文本
因此,转换标签并在任何字体大小的末尾添加一个“px”(我不需要更改/转换字体大小,只需将px粘贴在末尾)

正则表达式需要处理仅具有大小属性、颜色属性或两者兼有的字体标记:

<font size="10">some text</font>

<font color="#000000">some text</font>

<font size="10" color="#000000">some text</font>

<font color="#000000" size="10">some text</font>
一些文本
一些文本
一些文本
一些文本

我还需要另一个正则表达式来执行相反的转换。例如:

<span style="font-size:10px;">some text</span>
一些文本
将成为:

<font size="10">some text</font>
一些文本
与转换标记之前一样,但这次删除了“px”,我不需要担心更改字体大小

同样,这还需要处理大小样式、字体样式以及两者的组合:

<span style="font-size:10px;">some text</span>

<span style="color:#000000;">some text</span>

<span style="font-size:10px; color:#000000;">some text</span>

<span style="color:#000000; font-size:10px;">some text</span>
一些文本
一些文本
一些文本
一些文本

我从XML文件中的CDATA标记中提取基本HTML和文本,然后将它们显示在网页上。文本还显示在富文本编辑器中,以便可以对其进行编辑/翻译,然后保存回新的XML文件。然后XML将由flash文件读取,因此需要使用老式的HTML

我想转换这段代码的原因主要是为了显示。为了正确显示文本大小并使其与我的富文本编辑器配合使用,需要将它们转换为XHTML/内联CSS。富文本编辑器还将生成XHTML/内联CSS,在保存到XML文件之前,我需要将其“返回”转换为标准HTML

我对XSLT转换了解不多,但我不确定这是否是我需要的,或者它可能比我现在需要的更多,但如果我错了,请纠正我(并为我指出您可能有任何有用链接的方向)


我知道,我会尝试告诉我许多不同的方法来设置代码,以实现我想要的功能,但还有很多其他的排列方式我甚至没有提到,这些排列方式迫使我走上这条道路,所以我真正想做的就是将包含标准HTML的字符串转换为XHTML/内联CSS,然后是同样的,但反过来。

我不认为正则表达式是解决这个问题的方法


坚持使用基于XML的技术,如XSLT来进行转换。

。改用XML解析。

最好解释一下为什么需要这样做,因为除非有特定的目标,否则这似乎会将一种非语义代码转换为另一种非语义代码


基于
class
id
属性,将时间花在转换为单独的HTML和CSS代码上会更好吗?

我同意这两条评论,即xslt应该用于xml转换,并且这种风格不应该混合在HTML中。。。但如果您赶时间,这里是您的正则表达式(perl,我不知道任何VB,但它不应该太远)的起点:

's/<font(.*)size="([^ ]*)"(.*)color="([^ ]*)"(.*)<\/font>/<span$1style="font-size:$2px;color:$4"$3$5<\/span>/g'

's/既然有些人已经给了你警告,我就跳到正则表达式解决方案

首先,我将列出一些假设,这些假设不是一成不变的,但允许在您提出问题时解决问题,而无需我做额外的工作:

  • 您可以使用LINQ(否则需要更新)
  • Font/Span标记将使用小写(
    Font
    Span
    而不是
    Font
    Span
  • 每个样式属性值将正确格式化,以分号结尾
    与您的示例相似
  • 可以通过
    RegexOptions.IgnoreCase
    简单地处理区分大小写的问题,但反过来,字典值需要存储为
    ToLower
    ,以便在以后访问值时保持所有内容不变。第三点确保拆分文本不会失控

    下面是演示替换的示例程序

    Sub Main
        Dim inputs As String() = { _
            "<font size=""10"">some text</font>", _
            "<font color=""#000000"">some text</font>", _
            "<font size=""10"" color=""#000000"">some text</font>", _
            "<font color=""#000000"" size=""10"">some text</font>", _
            "<font size=""10"">some text</font> other text <font color=""#000000"">some text</font>", _
            "<span style=""font-size:10px;"">some text</span>", _
            "<span style=""color:#000000;"">some text</span>", _
            "<span style=""font-size:10px; color:#000000;"">some text</span>", _
            "<span style=""color:#000000; font-size:10px;"">some text</span>", _
            "<span style=""color:#000000; font-size:10px;"">some text</span> other <font color=""#000000"" size=""10"">some text</font>" _
        }
    
        Dim pattern As String = "<(?<Tag>font|span)\b(?<Attributes>[^>]+)>(?<Content>.+?)</\k<Tag>>"
        Dim rx As New Regex(pattern)
    
        For Each input As String In inputs
            Dim result As String = rx.Replace(input, AddressOf TransformTags)
            Console.WriteLine("Before: " & input)
            Console.WriteLine("After: " & result)
            Console.WriteLine()
        Next
    End Sub
    
    Public Function TransformTags(ByVal m As Match) As String
        Dim rx As New Regex("(?<Key>\b[a-zA-Z]+)=""(?<Value>.+?)""")
        Dim attributes = rx.Matches(m.Groups("Attributes").Value).Cast(Of Match)() _
                           .ToDictionary(Function(attribute) attribute.Groups("Key").Value, _
                                         Function(attribute) attribute.Groups("Value").Value)
    
        If m.Groups("Tag").Value = "font" Then
            Dim newAttributes = String.Join("; ", attributes.Select(Function(item) _
                                                    If(item.Key = "size", "font-size", item.Key) _
                                                    & ":" _
                                                    & If(item.Key = "size", item.Value & "px", item.Value)) _
                                                .ToArray()) _
                                                & ";"
            Return "<span style=""" & newAttributes & """>" & m.Groups("Content").Value & "</span>"
        Else
            Dim newAttributes = String.Join(" ", attributes("style") _
                                                 .Split(New Char() {";"c}, StringSplitOptions.RemoveEmptyEntries) _
                                                 .Select(Function(s) _
                                                    s.Trim().Replace("px", "").Replace("font-", "").Replace(":", "=""") _
                                                    & """") _
                                            .ToArray())
            Return "<font " & newAttributes & ">"  & m.Groups("Content").Value & "</font>"
        End If
    End Function
    
    Sub-Main
    将输入设置为字符串()={_
    “一些文字”_
    “一些文字”_
    “一些文字”_
    “一些文字”_
    “一些文本其他文本一些文本”_
    “一些文字”_
    “一些文字”_
    “一些文字”_
    “一些文字”_
    “一些文本其他一些文本”_
    }
    将图案变暗为字符串=“]+)>(?。+)”
    作为新正则表达式的Dim rx(模式)
    将每个输入作为输入中的字符串
    Dim结果为字符串=rx.Replace(输入,TransformTags的地址)
    Console.WriteLine(“之前:”&input)
    Console.WriteLine(“之后:”&result)
    Console.WriteLine()
    下一个
    端接头
    公共函数TransformTags(ByVal m作为匹配项)作为字符串
    作为新正则表达式的Dim rx((?\b[a-zA-Z]+)=“”(?。+)“”)
    Dim attributes=rx.Matches(m.Groups(“attributes”).Value).Cast(匹配的)()_
    .ToDictionary(函数(属性)属性.Groups(“键”).Value_
    函数(属性)属性。组(“值”)。值)
    如果m.Groups(“Tag”).Value=“font”则
    Dim newAttributes=String.Join(;),attributes.Select(函数(项)_
    If(item.Key=“size”,“font size”,item.Key)_
    & ":" _
    &如果(item.Key=“size”,item.Value和“px”,item.Value))_
    .ToArray())_
    & ";"
    返回“&m.Groups”(“内容”).Value&”
    其他的
    Dim newAttributes=String.Join(“,属性(“样式”)_
    .拆分(新)