问题描述
我正在尝试使用Snowflakes regex实现,我刚刚发现的是POSIX BRE / ERE。我以前曾使用过正则表达式,以便使用自定义定界符(用于文本文件解析)识别不在双引号字符串部分的所有逗号。
示例文本字符串:
"Foreign Corporate Name Registration","99999","Valuation Research","Active Name",02/09/2020,"02/09/2020","NEVADA","UNITED STATES","123 SOME STREET","MILWAUKEE","WI","53202",
正则表达式命令和替换(在regex101.com中工作):
([("].*?["])*?(,)
\1#^#
Regex101.com(和所需的)结果:
"Foreign Corporate Name Registration"#^#"99999"#^#"Valuation Research"#^##^#"Active Name"#^#02/09/2020#^#"02/09/2020"#^#"NEVADA"#^#"UNITED STATES"#^##^##^#"123 SOME STREET"#^##^#"MILWAUKEE"#^#"WI"#^#"53202"#^#"UNITED STATES"#^#"123 SOME STREET"#^##^#"MILWAUKEE"#^#"WI"#^#"53202"#^#"UNITED STATES"#^##^##^##^##^##^##^##^##^##^##^##^#
那么,既然我现在才发现我不能使用惰性量词,那么任何超级正则表达式都可以建议我如何更改表达式以在与POSIX BRE / ERE兼容的情况下返回相同的结果吗? >
解决方法
您需要
- 在这里将惰性量词转换为贪婪,因为它们仍将以与惰性量词相同的方式匹配
-
[("]
匹配(
或"
,您只需将"
与此字符类匹配,仅使用"
。
最终的POSIX ERE表达式如下
("[^"]*")*(,)
它匹配
-
("[^"]*")*
-出现零次或多次"
,一个或多个"
以外的字符,然后出现一个"
(第1组) -
(,)
-逗号(第2组)
注意:POSIX BRE 表达式看起来像\("[^"]*"\)*\(,\)
,其中捕获组由一对转义括号定义。