如何在符合 POSIX BRE / ERE 的同时将我的表达式更改为 return 相同的结果?

How to alter my expression to return the same result while being compliant with POSIX BRE / ERE?

我正在尝试使用 Snowflakes 正则表达式实现,我刚刚发现它是 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","UNITED STATES","123 SOME STREET",,"MILWAUKEE","WI","53202","UNITED STATES",,,,,,,,,,,,

正则表达式命令和替换(在 regex101.com 中工作):

([("].*?["])*?(,)
#^#

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"#^##^##^##^##^##^##^##^##^##^##^##^#

所以,考虑到我现在才发现我不能使用惰性量词,任何 uber-regex'ers 都可以建议我如何将我的表达式更改为 return 相同的结果,同时符合 POSIX BRE/ERE?

你需要

  • 在这里将惰性量词转换为贪婪量词,因为它们仍然会以与惰性量词相同的方式匹配
  • [("]匹配(",你只需要匹配"这个字符class,只用"

最终的 POSIX ERE 表达式看起来像

("[^"]*")*(,)

匹配

  • ("[^"]*")* - " 零次或多次出现,除 " 以外的一个或多个字符,然后是 "(第 1 组)
  • (,) - 逗号(第 2 组)

注意:POSIX BRE 表达式看起来像 \("[^"]*"\)*\(,\),其中捕获组是用一对转义括号定义的。