正则表达与信

时间:2016-08-31 19:42:23

标签: python regex format expression

我需要匹配那些格式化的东西 657432-76,54678-01,54364 A -12

我得到(r'^\d{6}-\d{2}$')(r'^\d{5}-\d{2}$') 但你怎么收到这封信?

谢谢!

5 个答案:

答案 0 :(得分:0)

如果你想要一个正则表达式匹配第三个模式,你可以使用这样的正则表达式:

(?i)(r'^\d{5}[a-z]-\d{2}$')

<强> Working demo

但是,如果你想为所有这些都使用一个正则表达式,你可能会觉得很有用:

(?i)(r'^\d{5-6}[a-z]?-\d{2}$')

请注意,这将允许:657432A-76但如果您只想要5位数字,那么您可以使用:

(?i)(r'^\d{5}(?:\d?|[a-z])-\d{2}$')

答案 1 :(得分:0)

对于使用[a-zA-Z]的字母,如果它只是大写,那么[A-Z]就足够了。

答案 2 :(得分:0)

看起来这个模式通常是6个字符,最后一个char max可能是字母或数字,然后-然后是2个数字?所以你要使用这个模式

pattern = r'^d{5}.+-\d{2}$'

答案 3 :(得分:0)

这个表达怎么样:

>>> re.search(r'^\d+[A-Z]?-\d+$','657432A-76')
<_sre.SRE_Match object; span=(0, 10), match='657432A-76'>
>>> 
>>> re.search(r'^\d+[A-Z]?-\d+$','657432-76')
<_sre.SRE_Match object; span=(0, 9), match='657432-76'>
>>> 
>>> re.search(r'^\d+[A-Z]?-\d+$','65743-76')
<_sre.SRE_Match object; span=(0, 8), match='65743-76'>
>>> 

或者格式如下:

[At most six digits][Possibility of a letter][-][At most two digits]

然后:

>>> re.search(r'^\d{,6}[A-Z]?-\d{,2}$','65743A-76')
<_sre.SRE_Match object; span=(0, 9), match='65743A-76'>
>>> 
>>> re.search(r'^\d{,6}[A-Z]?-\d{,2}$','657436-76')
<_sre.SRE_Match object; span=(0, 9), match='657436-76'>

答案 4 :(得分:0)

这里有一个匹配所有样本的可能候选人:

import re

samples = [
    "657432-76",
    "54678-01",
    "54364A-12"
]

for s in samples:
    print re.match(r'^(\d+[A-Z]?)-(\d+)$', s).groups()