如果我有以下简化字符串:
string331-itemR-icon253,string131-itemA-icon453,
string12131-itemB-icon4535,string22-itemC-icon443
如何仅使用正则表达式获得以下内容?
string12131-itemB-icon4535,
所有数字都不详。唯一已知的部分是 itemA,itemB,itemC,string和icon
我已尝试string.+?itemB.+?,
,但它也会从第一次出现的string
而不是与itemB相邻的那个出现
我也尝试在各个位置使用itemB之前的[^icon]
,但无法使其工作。
答案 0 :(得分:3)
试试这个:
string[^,]+itemB[^,]+,
答案 1 :(得分:2)
试试这个正则表达式
string\d+-itemB-icon\d+,
答案 2 :(得分:2)
使用限制字符集而不是通配符的给定解决方案是最简单的,但要在一般问题上获得更多:你得到非贪婪量词部分,但非贪婪不会阻止匹配从需要尽可能多的角色找到匹配。您可能正在寻找 atomic group 运算符,(?>group).
一旦组匹配某些内容,如果匹配器需要回溯,它将以原子方式处理。
(?>string.+?item)B.+?,
在您的示例中,该群组与string331-item
匹配,但B
与R
不匹配,因此整个群组都会被投放,搜索会移至下一个string
答案 3 :(得分:0)
您没有提及将项目分隔为已知部分的逗号,但在示例正则表达式中使用它,因此我假设它可以在解决方案中使用。尝试将逗号排除为字符集,而不是与“。”匹配。