3 回答

TA貢獻(xiàn)1828條經(jīng)驗 獲得超3個贊
我錯誤地陳述了問題。正確的問題是:在項目編號之后查找包含數(shù)字的字符串,直到找到單詞,除非該單詞是and。
改寫:找到后面Item Number(s)有 1 個或多個數(shù)字且由零個或多個非單詞字符分隔的字符串,或者重復(fù)單詞“and”,前面有一個非單詞字符,后跟 0 個或多個非單詞字符
import re
s = '123 ignore Item Number(s)92349252 and,,;^and,and;;;30239429434, 124029354,345340332, and and 234325923 hallo 2121124'
pattern = r'.*?Item Number\(s\)(((\W*?|(\W+?and)+\W*?)\d+)+)'
m = re.match(pattern, s).group(1)
numbers = re.findall('\d+', m)
print(numbers)
是
['92349252', '30239429434', '124029354', '345340332', '234325923']

TA貢獻(xiàn)1788條經(jīng)驗 獲得超4個贊
我們可以嘗試使用字符串 split 與 的組合re.findall。首先,拆分 text 上的輸入Item Number(s),并保留數(shù)組中的第二個條目。這對應(yīng)于 右側(cè)的所有文本Item Number(s)。然后,使用re.split分割 空格,后跟一些不是單詞、and數(shù)字、空格或逗號的內(nèi)容。最后,使用re.findall從剩余文本中捕獲所有數(shù)字。
s = 'this part 123 should be ignored Item Number(s)92349252 and 30239429434, 124029354,345340332, 234325923 hallo 2121124'
nums = re.findall(r'\b\d+\b', re.split(r' (?!\band\b|[\d\s,])', s.split('Item Number(s)')[1])[0])
print(nums)
['92349252', '30239429434', '124029354', '345340332', '234325923']
添加回答
舉報