【发布时间】:2018-05-17 14:10:17
【问题描述】:
我想解析一个包含这样内容的许可证文件。
组件="A0000 B0000 G0000"
文件中必须有引号来标记包中组件的开始和结束。我已经在 regex101.com 上测试过组合,但这并不能解决问题
正则表达式("?(?<components>\w+)*\s?"?) 适用于字符串“A0000 B0000 G0000”并返回我需要的组件的各个值:A0000、B0000 等等
但是当我测试 (COMPONENTS|PACKAGES)=("?(?<components>\w+)\s?"?) 时,该块无法返回这些值并且只返回第一个 A0000。
我需要帮助来提取所有这些单独的值。请帮忙。
【问题讨论】:
-
你的意思是你想要
(?:\G(?!^)\s+|(?:COMPONENTS|PACKAGES)=")\K[^\s"]+这样的东西吗? -
如果需要引号,为什么要加上'?'他们后面的量词?此外,您的第二个正则表达式查找 \w+ 后跟 \s,但不会重复该模式,因此难怪它只会捕获一个字段。
-
PACKAGES=...是怎么出现的?是否也有相同类型的线?它们与COMPONENTS行有什么关系,还是完全独立的? -
Pranay,当您使用
perl标签标记问题时,您是指 Perl 5 语言还是您使用的语言中的任何特定选项(如 R)? -
@WiktorStribiżew 您的解决方案奏效了。如果前面和后面的行包含在正则表达式中,我不明白为什么它不会复制到文件的其他部分。我在标签中包含了
perl,因为正则表达式是为 Perl 语言编写的。