[英]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.