6个字符文本的正则表达式,中间有/不带空格



你好,我正在寻找一个正则表达式,将识别这种模式:

第一个字母总是以字符R/L/F等开头,并且后面总是有5数字。

我在编码正则表达式时遇到了问题,其中有一个空格或多个空格。

R20209
R4 01 08
R5 0801

此外,有时零将被识别为o,因此R20209将被识别为R2o2o9。有办法解释这一点吗?

感谢编辑:谢谢zr0gravity7,我的意思是字母后面跟着"5"位数的数字而不是"4"位数的数字

仅限regex的解决方案:

^[A-Z](?:[doO] ?){4}[doO]$

这将匹配大写字母后面正好出现四次的数字(或"o"/" o"),后面尾随一个可选的空格,然后最后出现一个数字(或"o"/" o"),这次没有尾随空格。由于开始和结束锚,它匹配整个字符串。

:试试https://regex101.com/r/5kmXEe/1

若要强制第一个字符为特定的字母,可以将[A-Z]替换为[RLF]

为了允许数字之间有任意数量的空格,您可以使用Kleene星号来匹配更多的空格:

^[A-Z](?:[doO] *){4}[doO]$

我认为您最好消除字符串中的空格并将oO更改为0

import re
def fun(str):
str_formatted = str.replace(' ','').replace('o', '0').replace('O', '0')
return re.match('[RLF]d{5}', str_formatted)[0]
for i in ['R20209', 'R4 o1 08', 'R5 O8o1']:
print(fun(i))

你可以试试这个

  • [RLF]-匹配R, L, f中的任意一个
  • s*-匹配0或多个空格。
  • [do]-匹配数字或字母o
  • re.I-忽略字母大小写。匹配大写和小写。
import re
s = '''R20209 R4 01  08 R5 08 01 F2 3 4 5 Af R4567 LL45 67 R 2o2o 9 R 3070 L 5 66 6 r34567 L3O45O'''
f = re.findall(r'b[RLF]s*[do]s*[do]s*[do]s*[do]s*[do]',s,re.I)
print(f)
['R20209', 'R4 01  08', 'R5 08 01', 'R 2o2o 9',  'r34567', 'L3O45O']

最新更新