正则表达式以特殊字符

时间:2016-05-27 09:01:27

标签: regex vba

我需要从以["开头并以"]结尾的大文本中提取所有匹配项。这些特殊字符将每条记录与数据库分开。我需要提取所有记录。

在此记录中,有-.&()/{space}等字母,数字和特殊字符左右。
我在Office VBA写这篇文章 我到目前为止的模式如下:.Pattern = "[[][""][a-z|A-Z|w|W]*"
使用此模式,我能够从每个记录中提取第一个单词,其中包含起始字符["。找到的匹配数是正确的 一条记录的示例: ["blabla","blabla","blabla","\u00e1no","nie","\u00e1no","\u00e1no","\u00e1no","\u003Ca class=\u0022btn btn-default\u0022 href=\u0022\u0026#x2F;siea\u0026#x2F;suppliers\u0026#x2F;42\u0022\u003E\u003Ci class=\u0022fa fa-pencil\u0022\u003E\u003C\/i\u003E Upravi\u0165\u003C\/a\u003E \u003Ca class=\u0022btn btn-default\u0022 href=\u0022\u0026#x2F;siea\u0026#x2F;suppliers\u0026#x2F;form\u0026#x2F;42\u0022\u003E\u003Ci class=\u0022fa fa-file-pdf-o\u0022\u003E\u003C\/i\u003E Zmluva\u003C\/a\u003E \u003Ca class=\u0022btn btn-default\u0022 href=\u0022\u0026#x2F;siea\u0026#x2F;suppliers\u0026#x2F;crz-form\u0026#x2F;42\u0022\u003E\u003Ci class=\u0022fa fa-file-pdf-o\u0022\u003E\u003C\/i\u003E Zmluva CRZ\u003C\/a\u003E"]

问题是:如何提取以["开头并以"]结尾的所有记录?
我不需要开始和结束字符,但我可以稍后清理它 谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

最简单的方法是使用[""] / Replace / {{1}摆脱最初的LeftRight。 } {},然后MidSplit(在VBA中,",")。

E.g。

""","""

如果您打算使用正则表达式,则可以使用input = "YOUR_STRING" input = Replace(Replace(input, """]", ""), "[""", "") result = Split(input, """,""") 模式,但对于长输入效率不高,如果发生超时问题,甚至可能会冻结宏。您可以将其展开为

\["[\s\S]*?"]

请参阅regex demo。在VBA中,\["[^"]*(?:"(?!])[^"]*)*"]

请注意,使用此展开模式,您甚至不需要使用点匹配换行问题的解决方法(否定字符类Pattern = "\[""[^""]*(?:""(?!])[^""]*)*""]"匹配除[^"]之外的任何字符,包括换行符。

模式详情

  • " - \["字面意思
  • [" - 除[^"]*
  • 以外的零个或多个字符
  • " - 零个或多个序列
    • (?:"(?!])[^"]*)* - "(?!])未跟随"
    • ] - 除[^"]*
    • 以外的零个或多个字符
  • " - 文字字符序列"]