regex - 如果满足某些条件,如何匹配整个字符串
问题描述
我在尝试从字符串中分离大小方面做了很多工作,但是我遇到了一些问题。
当前:
https://regex101.com/r/zbEtOU/1
当前的正则表达式
^([a-z]+\d*(?:\s*-\s*[a-z\d]+[/-][a-z\d]+)?|\d+)
例子:
30/32
固定 8 (32-36)
XS/S
米/升
1-2年
秒/米
0-3M
32
期望的结果:
我想从中分离出第一个值,但是当我遇到括号时,我想匹配这些值。
因此,示例中的实际期望结果:
30 /32 = 30
固定 8 ( 32 -36) = 32
XS /S = XS
米/升 =米
1-2Y = 1-2Y(我猜在这种情况下没有办法输出“1Y”?否则它会与 1-2M 重叠在这种情况下导致混淆为 1 != 1。发生这种情况时,我宁愿得到原始字符串)理想情况= 1Y
s /m = s
1-3M = 1-3M(我猜在这种情况下没有办法输出“1M”?否则它会与 1-2Y 重叠在这种情况下导致混淆为 1 != 1。当这种情况发生时,我更愿意得到原始字符串) 理想情况= 1M
32 = 32
我真的无法解决这个问题,因为这里有很多不同的条件!所有正则表达式都是不敏感的,因此无需担心大写字母。
任何人有一个很好的和简单的方法来解决我的问题?
需要在第 1 组中捕获所有内容 - 否则我的系统无法将其隔离
在 Python 3.7 中运行
解决方案
您可以使用
(?:^|.*\()(\d+(?:-\d+[A-Za-z]{1,3})?|[A-Za-z]{1,3})\b
请参阅正则表达式演示。
详情:
(?:^|.*\()
- 字符串开头或除换行符之外的任何零个或多个字符尽可能多,然后是一个(
字符(\d+(?:-\d+[A-Za-z]{1,3})?|[A-Za-z]{1,3})
- 第一组:\d+(?:-\d+[A-Za-z]{1,3})?
- 一个或多个数字,后跟可选的 a-
,一个或多个数字,然后是一到三个 ASCII 字母|
- 或者[A-Za-z]{1,3}
- 一个、两个或三个 ASCII 字母
\b
- 单词边界。
推荐阅读
- vue.js - Vue 方法返回 [object Promise]
- ruby-on-rails - Rails 捕获和处理异常的方法
- c# - 如何在这种多线程情况下编写干净的代码?
- javascript - 在 MVC 中使用 Ajax 调用提交表单时如何使用数据注释?
- c# - 如何从 Xamarin 应用程序在 couchbase 中创建用户?
- java - 在将 JSON 转换为 XML 时添加额外的元数据
- image - 有效存储和检索的图像缓存机制
- c#-4.0 - 看起来我们不支持这种文件格式
- azure - Helm 不接受值 YAML
- azure-active-directory - 从 ARM 模板获取服务主体 ID