我有以下一行:
from itertools import *
d = {'key1': ['PTRG0097',
'CPOG0893',
'MMUG0444',
'BTAG0783'],
'key2': ['CPOG0893',
'MMUG0444',
'PPYG0539',
'BTAG0083']}
def expand(k, vs):
return product([k], vs)
print(list(zip(*chain.from_iterable(starmap(expand, d.items())))))
我想收到字符串:3EAM7A 1 3 EI AMANDINE MRV SHP 70 W 0 SH3-A1 1 SHP 70W OVOIDE AI E27 SON PIA PLUS
。所以我决定选择EI AMANDINE MRV SHP 70 W
(也可以是1
,2
或3
)和99
之间的字符串(也可以是0
,1
,2
,3
或4
)
我试过了:
5
但我有这个结果:
(0|1|2|3|99)(.*)(0|1|2|3|4|5)
这不是我想要获得的。
你对正则表达式有什么想法让选择有效吗? 谢谢!
答案 0 :(得分:2)
答案 1 :(得分:2)
我认为您想要匹配“word”4到9?
您想要的比赛将在第1组
^(\S+\s){3}((\S+\s){6})
如果您有一个完整的主题字符串文件,请启用多行选项。
答案 2 :(得分:1)
您可以尝试:
\s(?:[0-3]|99)\s([A-Z].*?)\b(?:[0-5])\b
并按组$ 1获取字符串。或者,如果您的语言支持环顾四周,请尝试:
(?<=\s[0-3]\s|99)[A-Z].+?(?=\s[0-5]\s)
直接获得比赛。
答案 3 :(得分:1)
另一种基于匹配所有初始space
+ digit
序列的解决方案:
\b(?:(?:[0-3]|99)\b\s*)+(.*?)\s*\b(?:[0-5])\b
请参阅demo
结果在第1组中。
使用\b(?:(?:[0-3]|99)\b\s*)+
,可以选择允许的前导集中最右边的数字。
答案 4 :(得分:0)
您可以使用以下正则表达式:
(?:(?:[0-3]|99)\s)+(.*?)\s(?:[0-5])\s
请参阅演示https://regex101.com/r/iX6oE1/6
另请注意,为了匹配一系列数字,您可以使用字符类而不是多个OR。