需要有关re的帮助。
file = 'file No.WR79050107006 from files'
所以我要做的是验证文件字符串是否包含WR + 11位数。
result = re.match('^(\S| )*(?P<sr>(\d){11})(\S| )*', file)
它只验证了11位数,但在它之前没有WR。 我怎么能这样做?
匹配后使用re如何获得匹配值(WR79050107006)
我可以做字符串查找
index = file.find('file No.')
然后获取next 13 char的值。
感谢
答案 0 :(得分:1)
如果通过“验证文件字符串是否包含WR + 11位”,则表示“正好是11,而不是12 +”,
mo = re.search(r'WR(\d{11})(\D|$)', thestring)
应该这样做。如果你的意思是“11或更多”,则不需要(\D|$)
部分(或等效的否定前瞻等)。
编辑:由于OP现在在评论中说WR和数字之间可能有空格,因此可以更改为
mo = re.search(r'WR\s*(\d{11})(\D|$)', thestring)
当然,区别在于\s*
,这意味着“这里有0个或更多的空白字符”。
mo
没有这样的匹配,则 None
为thestring
;否则,mo.group(1)
会为您提供感兴趣的11位子字符串。
答案 1 :(得分:0)
试试这个:
result = re.search("No.WR\d{11}", file)
答案 2 :(得分:0)
>>> file = 'file No.WR79050107006 from files'
>>> for item in file.split():
... if "No.WR" in item:
... d=item.replace("No.WR","")
... if d.isdigit() and len(d) == 11:
... print "ok"
...
ok
答案 3 :(得分:0)
你对Alex的答案的评论并不清楚。如果WR
和11位数之间有空格,记录是否有效?
希望其中一个例子有所帮助。否则,将其他变体和预期结果添加到您的问题中,您应该得到直截了当的答案。
>>> import re
>>> re.findall(r'(WR\d{11})(?:\D|$)', 'file No.WR79050107006 from files')
['WR79050107006']
>>> re.findall(r'(WR)(\d{11})(?:\D|$)', 'file No.WR79050107006 from files')
[('WR', '79050107006')]
WR和11位之间的空格
>>> re.findall(r'(WR)(\d{11})(?:\D|$)', 'file No.WR 79050107006 from files')
[]
>>> re.findall(r'(WR)\s*(\d{11})(?:\D|$)', 'file No.WR 79050107006 from files')
[('WR', '79050107006')]
>>>
WR与11位之间的任何内容
>>> re.findall(r'(WR).*(\d{11})(?:\D|$)', 'file No.WR!@#$%79050107006 from files')
[('WR', '79050107006')]