簡體   English   中英

在重復和非重復的正則表達式中捕獲多個可選組

[英]Capturing multiple optional groups in a regex both repeating and non repeating

我必須匹配類似於這些的表達式

STAR 13

STAR 13, 23

STAR 1, 2 and 3 and STAR 1

但只捕獲數字。 位數未指定。

我試過STAR(?:\\s*(?:,|and)\\s*(#\\d+))+但它似乎沒有准確地捕捉到這些術語。 無法添加其他依賴項。 只是re模塊而已。

問題是一個更大的問題,其中STAR是另一個已經解決的正則表達式。 請不要理會它,只需將其視為一個字母組合即可。 只需在正則表達式中包含字母STAR

如果您不知道數字r'[0-9]+'數字,請指定 1 位或更多。 並捕獲所有數字,您可以使用: r'(\\d+)'

用一個正則表達式來做:

re.findall("STAR ([0-9]+),? ?([0-9]+)? ?a?n?d? ?([0-9]+)?",a)

[('13', '', '')]

[('13', '23', '')]

[('1', '2', '3'), ('1', '', '')]

可以通過兩個步驟獲得更簡單和更清晰的結果,首先你需要在這樣的列表中有變量:

tab = ["STAR 13","STAR 13, 23","STAR 1, 2 and 3 and STAR 1"]

list = filter(lambda x: re.match("^STAR",x),tab)
list_star = filter(lambda x: re.match("^STAR",x),tab)
for i in list_star:
    re.findall(r'\d+', i)

['13']

['13', '23']

['1', '2', '3', '1']

你只需要在my_digit += re.findall(r'\\d+', i)

在 1 行中:

import functools
tab = ["STAR 13","STAR 13, 23","STAR 1, 2 and 3 and STAR 1"]
digit=functools.reduce(lambda x,y: x+re.findall("\d+",y),filter(lambda x: re.match("^STAR ",x),tab),[])

['13', '13', '23', '1', '2', '3', '1']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM