簡體   English   中英

帶字母的正則表達式

[英]Regular Expression with letter

我需要匹配格式化657432-76、54678-01、54364 A -12的內容

我得到了(r'^\\d{6}-\\d{2}$')(r'^\\d{5}-\\d{2}$')但是您怎么得到這封信呢?

謝謝!!

如果您希望單個正則表達式匹配第三個模式,則可以使用如下正則表達式:

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

工作演示

但是,如果您想為所有它們使用一個正則表達式,則可能會發現有用的:

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

請記住,這將允許: 657432A-76但是如果您只希望字母帶有5位數字,則可以使用:

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

對於字母,請使用[a-zA-Z] ,如果僅是大寫字母,則[AZ]就足夠了。

似乎模式通常是6個字符,最后一個字符最多有可能的字母或數字-然后是2個數字? 所以你會用這個模式

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

這個表達式怎么樣:

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

這是與您所有樣本匹配的可能候選者:

import re

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM