我如何根据整个字符串中的内容使第 1 组有所不同?
How can i make group 1 differ based on content in the whole string?
在我们的 Python 系统中,我试图隔离尺寸的第二部分以确保我可以单独保存值。
由于我以多种不同的方式获取数据,因此我必须考虑很多情况!同时,我们的系统要求正确识别组 1 中的所有内容,这增加了复杂性!
这是我目前得到的:
(?<=[\/\-])\s*([A-Za-z]+|\w+)+?(?!\d*\s*\)|\d*\)|\w*\))(?!\s*[\/\-]+)
示例
工作
这些是我的例子:
110/116
S/M
S / M
S/M(32-34)
110/116(10-12y)
110/116(S/M)
不工作
然而,我的正则表达式只能在上述示例中正常运行。
以下 7 个导致问题:
S/M / L /XL
S / M / L / XL
S/M / L/XL
S/M/L/XL
S/M/L/XL(30-32)
S/M / L/XL(30-32)
S/M / L / XL(30-32)
我怎样才能捕捉到这些案例 table:
Case
Input
Expected capture in group 1
1
S/M / L /XL
"L /XL"
2
S / M / L / XL
"L / XL"
3
S/M / L/XL
"L/XL"
4
S/M/L/XL
"L/XL"
5
S/M/L/XL(30-32)
"L/XL"
6
S/M / L/XL(30-32)
"L/XL"
7
S/M / L / XL(30-32)
"L / XL"
问题
如何在中间捕获一个 "/"
,包括后面的整个部分(如 /XL
)但没有任何后续括号(如不是 (30/32)
)。
示例 S/M / L / XL(30-32)
我只想捕获 L / XL
。
您可以使用
(?<=[/-])\s*([A-Z]+(?:\s*/\s*[A-Z]+)?|\d+)\b(?!\s*[/)-])
见regex demo。 详情:
(?<=[/-])
- 紧接在 /
或 -
之前的位置
\s*
- 零个或多个空格
([A-Z]+(?:\s*/\s*[A-Z]+)?|\d+)
- 第 1 组:一个或多个大写字母,然后是包含零个或多个空格的 /
字符的可选序列,然后是一个或多个大写字母,或者一个或更多数字
\b
- 单词边界
(?!\s*[/)-])
- 在当前位置的右侧,不能有零个或多个空格,然后是 /
、)
或 -
。
在我们的 Python 系统中,我试图隔离尺寸的第二部分以确保我可以单独保存值。
由于我以多种不同的方式获取数据,因此我必须考虑很多情况!同时,我们的系统要求正确识别组 1 中的所有内容,这增加了复杂性!
这是我目前得到的:
(?<=[\/\-])\s*([A-Za-z]+|\w+)+?(?!\d*\s*\)|\d*\)|\w*\))(?!\s*[\/\-]+)
示例
工作
这些是我的例子:
110/116
S/M
S / M
S/M(32-34)
110/116(10-12y)
110/116(S/M)
不工作
然而,我的正则表达式只能在上述示例中正常运行。
以下 7 个导致问题:
S/M / L /XL
S / M / L / XL
S/M / L/XL
S/M/L/XL
S/M/L/XL(30-32)
S/M / L/XL(30-32)
S/M / L / XL(30-32)
我怎样才能捕捉到这些案例 table:
Case | Input | Expected capture in group 1 |
---|---|---|
1 | S/M / L /XL |
"L /XL" |
2 | S / M / L / XL |
"L / XL" |
3 | S/M / L/XL |
"L/XL" |
4 | S/M/L/XL |
"L/XL" |
5 | S/M/L/XL(30-32) |
"L/XL" |
6 | S/M / L/XL(30-32) |
"L/XL" |
7 | S/M / L / XL(30-32) |
"L / XL" |
问题
如何在中间捕获一个 "/"
,包括后面的整个部分(如 /XL
)但没有任何后续括号(如不是 (30/32)
)。
示例 S/M / L / XL(30-32)
我只想捕获 L / XL
。
您可以使用
(?<=[/-])\s*([A-Z]+(?:\s*/\s*[A-Z]+)?|\d+)\b(?!\s*[/)-])
见regex demo。 详情:
(?<=[/-])
- 紧接在/
或-
之前的位置
\s*
- 零个或多个空格([A-Z]+(?:\s*/\s*[A-Z]+)?|\d+)
- 第 1 组:一个或多个大写字母,然后是包含零个或多个空格的/
字符的可选序列,然后是一个或多个大写字母,或者一个或更多数字\b
- 单词边界(?!\s*[/)-])
- 在当前位置的右侧,不能有零个或多个空格,然后是/
、)
或-
。