需要帮助re来匹配和获取值python

时间:2010-03-21 06:10:35

标签: python

需要有关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的值。

感谢

4 个答案:

答案 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没有这样的匹配,则

Nonethestring;否则,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')]