我有一个包含如下字段的字符串:id =“ID-120-1,ID-141-5,ID-92-5,N / A”
我只想捕获指定捕获组的“ID”(即没有“N / A”或其他可能进入的项目)。我认为这可行,但没有运气:
\bid=\"(?<id>(ID-\d+-\d+)+)
有什么想法吗?
答案 0 :(得分:1)
您正在使用的表达式只返回一个,因为您指望在每个ID值前面出现的id的开头。以下调整应该解决这个问题。
(?:(?:=\")|(?:,\s))(?<id>(?:ID-\d+-\d+)*)
另一种选择是放弃id =“检查所有部分
(?<id>(?:ID-\d+-\d+))
或者您可以在ID的末尾添加“,”,以确保您处于属性中。
(?<id>(?:ID-\d+-\d+))(?:(?:,\s)|(?:"))
答案 1 :(得分:0)
您还需要捕获逗号和空格,因为它们在您的字符串中重复:
\bid=\"(?<id>(ID-\d+-\d+, )+)
答案 2 :(得分:0)
我相信纯正的正则表达式无法实现您的目标,特别是如果ID和'N / A'可以混合使用。您需要在程序中使用循环,或者如果使用Perl或PHP,则可以在正则表达式(/e
开关)的替换部分中运行代码,以将匹配项添加到数组中。