python - 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'
- 我在第一个例子中想念 DIN
- 我总是想念结尾:2020 或-2,如果有,那就是选项
感谢您提供一些进一步微调的方向。
解决方案
首先,您使用字符类 ( [...]
) 就好像它们是对构造进行分组一样,(...)
. 要对多个备选方案进行分组,请使用非捕获组,(?:...|...)
.
你可以试试这样的模式
\b(?:(?:EN|DE|FR)\s+(?:ISO|DIN)|(?:ISO|DIN)\s+(?:EN|DE|FR))\s+\d+[-:]\d+
请参阅正则表达式演示。如果您对匹配尾随数字有特定要求,请随意添加限制量词。
详情:
\b
- 单词边界(?:
- 非捕获组的开始:(?:EN|DE|FR)\s+(?:ISO|DIN)
-EN
,DE
orFR
然后是一个或多个空格和一个ISO
orDIN
子字符串|
- 或者(?:ISO|DIN)\s+(?:EN|DE|FR)
- 一个ISO
或DIN
子字符串,一个或多个空格,然后EN
,DE
或FR
)
- 非捕获组结束\s+
- 一个或多个空格\d+
- 一位或多位数字[-:]
- 一个-
或:
\d+
- 一位或多位数字。
推荐阅读
- mongodb - Spring数据MongoDb聚合查找级联
- javascript - 如何使用 Javascript 让按钮播放 x 次
- varnish - 如何在 ubuntu 18.04 上使用 ssl 终止配置清漆?
- javascript - 如何通过子组件的表单正确更改父级的状态?
- python - gaierror,[Errno 11001] getaddrinfo 在 django 中失败
- reactjs - 如何将对象从节点传递到下一个 js 组件
- mule - 条件不匹配但仍使用以下 dw 代码获得响应
- c++ - C++ - 如何将空格键转换为 cmd 输入的破折号
- mysql - 在表中插入自动增量和当前日期时间
- python - 从外部 txt.file 读取/写入时忽略 IF 语句