3

我正在尝试使用 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中工作):

([("].*?["])*?(,)
\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"#^##^##^##^##^##^##^##^##^##^##^##^#

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

4

1 回答 1

0

你需要

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

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

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

它匹配

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

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

于 2020-09-03T08:34:02.610 回答