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