在模式中查找全局匹配

时间:2016-08-31 20:43:21

标签: python regex

如果我有这样的模式:(https://regex101.com/r/cR0aG8/12

Product:.*?(.*?),.*?ReqID:

我假设(d)

Product.*?(.*?),.*?ReqID:

会单独使用G(lobal)找到ToysBooksClothes因为我的(有点新手)眼睛正在寻找具有Product:的任何匹配以及以逗号结尾的任何字符串以及以ReqID:结尾的任何字符串。

但是你可以通过regeg101看到global-on获得与global-off完全相同的结果;第一个,。有没有办法构建这个,所以正则表达式只是说(任何字符串前面有Product:,后跟ReqID

基本上我需要收集以,开头/结尾模式为界的option[value="18:00"之前或之后的所有值。

2 个答案:

答案 0 :(得分:0)

您需要创建单独的组:

Product: (.*?), (.*?), (.*?), (.*?) ReqID:

匹配这些单词。对于这种模式,你甚至不需要?

这是多种模式的sed:

$ cat t1
Product: Toys, Books, Clothes, Radios ReqID:
Product: Toys, Books, Clothes, Radios ReqID:z
izProduct: Toys, Books, Clothes, Radios ReqID:

$ sed -e '/^Product:.*ReqID:$/ s/\(\w\+\)\(,\| \)/REPLACE\2/g' < t1
Product: REPLACE, REPLACE, REPLACE, REPLACE ReqID:
Product: Toys, Books, Clothes, Radios ReqID:z
izProduct: Toys, Books, Clothes, Radios ReqID:

它会查找以Product:开头并以ReqID:结尾的行。对于每一行,它匹配\(\w\+\)\(,\| \)

答案 1 :(得分:0)

如果您正在使用PCRE引擎(就像您的演示一样)或任何.NET,Java,Ruby或Perl正则表达式,那么请使用前一个标记\G的结尾处的开始匹配:

(?:Product:|(?!\A)\G)(\s+\w+),

Live demo

更新

基于新要求:

(?:Product:|(?!\A)\G)\s*(\w+)(?:,| \w+:)

Live demo