我在尝试从字符串中分离大小方面做了很多工作,但是我遇到了一些问题。
当前:
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-2Y
秒/米
0-3M
32
预期结果:
我想从中分离出第一个值,但是当我遇到括号时,我想匹配这些值。
示例中的实际期望结果:
30/32 = 30
固定 8 (32-36) = 32
XS/S = XS
m/l = m
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 中运行
答案 0 :(得分:0)
你可以使用
(?:^|.*\()(\d+(?:-\d+[A-Za-z]{1,3})?|[A-Za-z]{1,3})\b
参见regex demo。
详情:
(?:^|.*\()
- 字符串的开头或除换行符以外的任何零个或多个字符,然后是一个 (
字符(\d+(?:-\d+[A-Za-z]{1,3})?|[A-Za-z]{1,3})
- 第 1 组:
\d+(?:-\d+[A-Za-z]{1,3})?
- 一个或多个数字,后跟一个可选的 -
,一个或多个数字,然后是一到三个 ASCII 字母|
- 或[A-Za-z]{1,3}
- 一个、两个或三个 ASCII 字母\b
- 一个词边界。