在2个字符串之间的正则表达式中选择文本

时间:2015-08-13 13:59:21

标签: regex

我有以下一行:

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(也可以是123)和99之间的字符串(也可以是01234) 我试过了:

5

但我有这个结果:

(0|1|2|3|99)(.*)(0|1|2|3|4|5)

这不是我想要获得的。

你对正则表达式有什么想法让选择有效吗? 谢谢!

5 个答案:

答案 0 :(得分:2)

你非常接近!试试这个:

android:checkable="true"

Regex101

答案 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

DEMO

并按组$ 1获取字符串。或者,如果您的语言支持环顾四周,请尝试:

(?<=\s[0-3]\s|99)[A-Z].+?(?=\s[0-5]\s)

DEMO

直接获得比赛。

答案 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。