3 回答
TA贡献1828条经验 获得超3个赞
我错误地陈述了问题。正确的问题是:在项目编号之后查找包含数字的字符串,直到找到单词,除非该单词是and。
改写:找到后面Item Number(s)有 1 个或多个数字且由零个或多个非单词字符分隔的字符串,或者重复单词“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贡献1788条经验 获得超4个赞
我们可以尝试使用字符串 split 与 的组合re.findall。首先,拆分 text 上的输入Item Number(s),并保留数组中的第二个条目。这对应于 右侧的所有文本Item Number(s)。然后,使用re.split分割 空格,后跟一些不是单词、and数字、空格或逗号的内容。最后,使用re.findall从剩余文本中捕获所有数字。
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']
添加回答
举报