代码之家  ›  专栏  ›  技术社区  ›  user153498

捕获字符串中与另一组不匹配的部分(C#Regex)

  •  0
  • user153498  · 技术社区  · 16 年前

    我正在处理一个需要解析“格式化标记”的项目。通过使用如下标记: <b>text</b> b 为了大胆, i 对于斜体字, u 用于下划线,以及 s 三振)。

    <bi>some</b> text</i> here 会产生 一些 文本在这里。

    为了解析这些标记,我尝试使用正则表达式捕获第一个开始标记之前的任何文本,然后捕获所有标记及其后面的封闭文本。现在,我有这个:

    <(?<open>[bius]{1,4})>(?<text>.+?)</(?<close>[bius]{1,4})>

    它与单个标记、其包含的文本和单个相应的结束标记相匹配。

    i = 0 ,从位置1到位置处结束的子字符串 i = 1

    然而,这种方法效率极低。似乎最好在一个正则表达式中匹配整个字符串,而不是手动遍历字符串。

    我的实际问题是,是否可以匹配 匹配组,例如标记?我用谷歌搜索了一下,但没有成功,但也许我用的词不对。

    3 回复  |  直到 16 年前
        1
  •  1
  •   Mark Byers    16 年前

    我认为试图在一个正则表达式中解析和验证整个文本可能会给您带来问题。您正在解析的文本不是正则语言,因此正则表达式不是为此目的精心设计的。

    相反,我建议您首先将输入标记为单个标记和标记之间的文本。您可以使用一个简单的正则表达式来查找单个标记—这是一个非常简单的问题,正则表达式可以很好地处理。一旦将其标记化,就可以使用普通循环迭代标记,并根据需要对文本应用格式。

        2
  •  0
  •   Amber    16 年前

    ^(.*?) (匹配字符串开头的任何字符,非贪婪)。因此,它将匹配字符串开头出现的任何内容,但它将尽可能少地匹配,同时仍保持正则表达式其余部分的匹配。因此,你将抓取第一个捕获组中所有不正常匹配的内容。

    推荐文章