我需要从以["
开头并以"]
结尾的大文本中提取所有匹配项。这些特殊字符将每条记录与数据库分开。我需要提取所有记录。
在此记录中,有-
,.
,&
,()
,/
,{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"]
问题是:如何提取以["
开头并以"]
结尾的所有记录?
我不需要开始和结束字符,但我可以稍后清理它
谢谢你的帮助。
答案 0 :(得分:1)
最简单的方法是使用["
或"]
/ Replace
/ {{1}摆脱最初的Left
和Right
。 } {},然后Mid
与Split
(在VBA中,","
)。
E.g。
""","""
如果您打算使用正则表达式,则可以使用input = "YOUR_STRING"
input = Replace(Replace(input, """]", ""), "[""", "")
result = Split(input, """,""")
模式,但对于长输入效率不高,如果发生超时问题,甚至可能会冻结宏。您可以将其展开为
\["[\s\S]*?"]
请参阅regex demo。在VBA中,\["[^"]*(?:"(?!])[^"]*)*"]
请注意,使用此展开模式,您甚至不需要使用点匹配换行问题的解决方法(否定字符类Pattern = "\[""[^""]*(?:""(?!])[^""]*)*""]"
匹配除[^"]
之外的任何字符,包括换行符。/ p>
模式详情:
"
- \["
字面意思["
- 除[^"]*
"
- 零个或多个序列
(?:"(?!])[^"]*)*
- "(?!])
未跟随"
]
- 除[^"]*
"
- 文字字符序列"]