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

问题描述

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...