如何在符合 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 表达式看起来像 \("[^"]*"\)*\(,\)
,其中捕获组是用一对转义括号定义的。
我正在尝试使用 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 表达式看起来像 \("[^"]*"\)*\(,\)
,其中捕获组是用一对转义括号定义的。