Regex 如何在符合POSIX BRE/ERE的同时更改表达式以返回相同的结果?

Regex 如何在符合POSIX BRE/ERE的同时更改表达式以返回相同的结果?,regex,posix,posix-ere,Regex,Posix,Posix Ere,我正在尝试使用Snowflakes正则表达式实现,我刚刚发现它是POSIX BRE/ERE。我之前设计了一个正则表达式,允许我使用自定义分隔符(用于文本文件解析)标识所有不在双引号字符串部分中的逗号 示例文本字符串: "Foreign Corporate Name Registration","99999","Valuation Research",,"Active Name",02/09/2020,"02

我正在尝试使用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",,,,,,,,,,,,
Regex命令和替换(在中工作):

Regex101.com(和所需)结果:

因此,考虑到我现在终于发现我不能使用惰性量词,有没有uber-regex的人能建议我如何在遵守POSIX BRE/ERE的同时修改表达式以返回相同的结果?

您需要

  • 在这里将惰性量词转换为贪婪量词,因为它们仍然以与惰性量词相同的方式匹配
  • [(“]
    匹配
    ),您只需将
    与此字符类匹配,仅使用
最终的POSIX ERE表达式如下所示

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

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

注意:POSIXBRE表达式将类似于
\(“[^”]*“\)*\(,\)
,其中捕获组是用一对转义括号定义的。

您是否尝试过
(“[^”]*”*,
?@WiktorStribiżew-我没有!只做了一点小小的修改
(“[^”]*”)*(,)
,效果非常好!先生,非常感谢!!我想我不知道如何给你评分,因为这是一条评论-抱歉:(但是你为什么要捕捉逗号?你没有使用第二组,你在替换中有
\1^^
。逗号实际上是被替换的字符,我的(弱)理解是第一组是引号中的否定文本。使用正则表达式,我得到:
“外国公司名称注册”;^#^#"Valua…
不,小组将捕获的文本保存在单独的内存缓冲区中,像
\1
\2
等反向引用完全是这些匹配的占位符。很好的解释,是时候让我转到RegEx101了-谢谢Wiktor!@CaseyR您应该注意regex1支持的所有regex风格之间的不兼容01.com和POSIX BRE/ERE。还有,请看。我很乐意为您的答案投票,但您的措辞很奇怪。当然,如果问题是好的,它仍然可能有值得投反对票的答案?当然,这里的情况并非如此。
\1#^#
"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"#^##^##^##^##^##^##^##^##^##^##^##^#
("[^"]*")*(,)