繁体   English   中英

reg ex 允许数字的任意组合,直到特定数字 python

[英]reg ex to allow any combination of numbers till the specific number python

我需要从给定的以逗号分隔的数字字符串中提取三种模式。

data=
"2,2,2,2,4,3,2,4,3, 2,2,2,2,4,3,4,3,2,4,3,4,3, 2,2,2,2,2,4,3,4,3,3,2,4,3,4,3,3 ,2,2,2,3,4,4, 2,2,2,2,4,3,2,4,3 and so on"

从字符串中找出给定的模式。

2,2,2,2,4,3,2,4,3

所以为了提取给定的模式,我写了一个正则表达式。

模式一:

re.findall(r'2,2,2,2,4,3,2,4,3', data)

构建模式二:

但实际上,4 和 3 可以是任意组合和长度,直到它遇到数字 2 (它可以是 3,4,3,4,4 或任何类型的组合,直到它遇到第一个数字 2)。 对于模式二,2 应该与给定模式中的相同(4 个 2 的第一个和第二组 2 中的一个 2)。

模式三搭建:

模式三也需要 4 和 3 的组合规则作为模式 2 但除此之外,模式 3 还可以为两个 2 的集合提取额外的 2 个 2。 这意味着第一个 2 (4+2) 中有 4 个或 5 个或 6 个 2,而第二组 2 (1+2) 中有 1 个或 2 或 3 个 2。

前任:

2,2,2,2,2,3,4,3,4,4,2,4,3,4,3

2,2,2,2,2,3,4,3,4,4,2,2,4,3,4,3

2,2,2,2,3,4,3,4,4,2,2,4,3,4,3

所以最后,如果正则表达式 1 在数据字符串中捕获 20 个匹配项,则正则表达式两个捕获 50 个匹配项(比正则表达式 1 多 30 个)并且正则表达式 3 捕获 70 个匹配项(比正则表达式 2 多 20 个)

编辑:

data = '2,2,2,2,4,3,2,4,3,2,2,2,2,4,3,4,3,2,4,3,4,3,2,2,2,2,2,4,3,4,3,3,2,4,3,4,3,3,2,2,2,3,4,4,2,2,2,2,4,3,2,4,3,'

data2 =  re.sub(",","", data)

# pattern 1
re.findall("2{4}43243", data2)
#['222243243', '222243243']

# pattern2
re.findall("2{4}[43]+2[43]+", data2)
#['222243243', '2222434324343', '222243433243433', '222243243']

#pattern3
re.findall("2{4,6}[43]+2{1,3}[43]+", data2)
#['222243243', '2222434324343', '2222243433243433', '222243243']

但是模式 3 错过了模式 2 中包含的 222243433243433。 这怎么可能?

根据我对问题的理解,您能否检查以下模式是否符合您的预期?

注意:为了简单起见,我删除了逗号

data = '2,2,2,2,4,3,2,4,3,2,2,2,2,4,3,4,3,2,4,3,4,3,2,2,2,2,2,4,3,4,3,3,2,4,3,4,3,3,2,2,2,3,4,4,2,2,2,2,4,3,2,4,3'

data2 =  re.sub(",","", data)

# pattern 1
re.findall("2{4}43243", data2)
>>>['222243243', '222243243']

# pattern 2 and 3
re.findall("2{4,6}[43]+2{1,3}[43]+", data2)
>>>['222243243', '2222434324343', '2222243433243433', '222243243']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM