为了账号安全,请及时绑定邮箱和手机立即绑定

正则表达式匹配,直到找到除单词“and”之外的任何字符

正则表达式匹配,直到找到除单词“and”之外的任何字符

翻翻过去那场雪 2023-10-06 19:34:22
我想找到一个正则表达式解决方案来匹配项目编号之后的字符串的一部分,直到找到任何字符,除非它是单词“and”s = 'this part 123 should be ignored Item Number(s)92349252 and 30239429434, 124029354,345340332,  234325923 hallo 2121124'如果我专门添加它就可以了hallore.match(r'.*?Item Number\(s\)(.*?)hallo.*$', s).group(1)'92349252 and 30239429434, 124029354,345340332,  234325923 '但是我希望它适用于任何字符(包括hallo),除非它是单词and。
查看完整描述

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']


查看完整回答
反对 回复 2023-10-06
?
湖上湖

TA贡献2003条经验 获得超2个赞

您不需要正则表达式,只需使用:

a,b,c = s.partition("and")print(c)

c是and之后的部分。


查看完整回答
反对 回复 2023-10-06
?
尚方宝剑之说

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']


查看完整回答
反对 回复 2023-10-06
  • 3 回答
  • 0 关注
  • 68 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信