簡體   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