如果我想在此模式中捕获每个产品的所有最后一个术语:
PatternAnchor: Product-Computer-Keyboard,
Product-Computer-Monitor, Product-Computer-Motherboard PatternEnd:
我试过了:
PatternAnchor: Product-(.*?)-(?P<Item>.*?)(,|PatternEnd:)
但我仍然只得到第一场比赛。
答案 0 :(得分:0)
如果您想在开始时将Product-
开头的多个字符串与PatternAnchor:
匹配,那么您可以将此PCRE正则表达式与\G
(?:PatternAnchor: |\G\h*,\h*)Product-([^-]*)-(?P<Item>[^,\h]*)(?=,|\h*PatternEnd:)
\G
在上一场比赛结束或第一场比赛的字符串开头处断言位置。
基于评论,OP似乎想要一个特定于python的正则表达式。由于\G
在python正则表达式中不可用,因此可以使用:
\bProduct-([^-]*)-(?P<Item>[^,\s]*)(?=,|\s*PatternEnd:)
并单独检查以确保输入以PatternAnchor:
开头。
答案 1 :(得分:0)
在Python中,您可以使用两步法:
PatternAnchor:
(注意:如果字符串更复杂,也可以使用正则表达式执行此步骤)r'\bProduct-(.*?)-(?P<Item>.*?)(?:,|PatternEnd:)'
模式找到所需的所有模式。请参阅此Python demo:
import re
pat = r'\bProduct-(.*?)-(?P<Item>.*?)(?:,|PatternEnd:)'
s = 'PatternAnchor: Product-Computer-Keyboard, Product-Computer-Monitor, Product-Computer-Motherboard PatternEnd:'
res = []
if (s.startswith("PatternAnchor: ")):
res = re.findall(pat, s[15:])
print(res)
答案 2 :(得分:0)
https://regex101.com/r/mM1cV0/2
您的描述和代码/示例彼此之间存在很大差异。