Python RexExpression -标识标准



我从正则表达式开始,并喜欢找到这样的标准:

FR ISO 23213:2020或DIN EN 2323-2

我在章节中尝试这样做,这样更容易管理

std_prefix = '[EN|DE|FR| ]?[ISO|DIN][EN|DE|FR| ]?'
std_value = 'd{1,5}(?:[-]d{1,2})?(?:[:]d{4})'
std = ''.join([std_prefix, std_value])

我得到的是:'EN 2323', 'SO 23213'

  • 我错过了第一个例子
  • 我总是错过结尾:2020或-2,如果有,它是选项

感谢您的一些指导,以进一步微调。

首先,您正在使用字符类([...]),就好像它们是分组结构(...)一样。要对多个备选方案进行分组,请使用非捕获组(?:...|...)

你可以尝试像

这样的模式
b(?:(?:EN|DE|FR)s+(?:ISO|DIN)|(?:ISO|DIN)s+(?:EN|DE|FR))s+d+[-:]d+

参见regex演示。如果您有匹配尾随数字的特定要求,请随意添加限制量词。

细节:

  • b- a字边界
  • (?:-非捕获组启动:
    • (?:EN|DE|FR)s+(?:ISO|DIN)-EN,DEFR,然后是一个或多个空格和ISODIN子字符串
    • |-或
    • (?:ISO|DIN)s+(?:EN|DE|FR)-ISODIN子字符串,一个或多个空格,然后是EN,DEFR
  • )-非捕获组结束
  • s+-一个或多个空白
  • d+-一个或多个数字
  • [-:]-:
  • d+-一个或多个数字。

相关内容

  • 没有找到相关文章

最新更新