多次匹配non-capturing组
Match non-capturing group multiple times
我真的很努力想取一个好标题,但我不确定我问的是否正确。这是我的最佳尝试:
我正在使用 Python 的正则表达式
我需要使用命名组匹配号码:
15x20x30 -> 'values': [15,20,30]
15bits -> 'values': [15]
15 -> 'values': [15]
x15 -> 'values': [15]
但不应匹配:
456.48
888,12
6,4.8,4684.,6
到目前为止我最好的尝试是:
((?:[\sa-z])(?P<values>\d+)(?:[\sa-z]))
我使用 [\sa-z]
而不是 word-boundary 因为 15x20
是两个不同的值。
但是 它无法同时匹配 15
和 20
15x20
的情况。如果我在 15x 20
中添加一个额外的 space,它确实有效。我如何告诉它在最后“重置”non-capturing 组,以便它也适用于开头的 non-capturing 组?
您可以使用
(?<![^\sa-z])\d+(?![^\sa-z])
不区分大小写的版本:
(?i)(?<![^\sa-z])\d+(?![^\sa-z])
或者,使用 re.I
/ re.IGNORECASE
标志编译模式。
详情
(?<![^\sa-z])
- 如果紧靠左侧没有空格或小写字母(如果 (?i)
或 re.I
是任何 ASCII 字母,则匹配失败的负后视使用)
\d+
- 1+ 位数
(?![^\sa-z])
- 如果紧靠右侧没有空格或小写字母(如果 (?i)
或 re.I
是任何 ASCII 字母,则匹配失败的否定前瞻使用)
我真的很努力想取一个好标题,但我不确定我问的是否正确。这是我的最佳尝试:
我正在使用 Python 的正则表达式
我需要使用命名组匹配号码:
15x20x30 -> 'values': [15,20,30]
15bits -> 'values': [15]
15 -> 'values': [15]
x15 -> 'values': [15]
但不应匹配:
456.48
888,12
6,4.8,4684.,6
到目前为止我最好的尝试是:
((?:[\sa-z])(?P<values>\d+)(?:[\sa-z]))
我使用 [\sa-z]
而不是 word-boundary 因为 15x20
是两个不同的值。
但是 它无法同时匹配 15
和 20
15x20
的情况。如果我在 15x 20
中添加一个额外的 space,它确实有效。我如何告诉它在最后“重置”non-capturing 组,以便它也适用于开头的 non-capturing 组?
您可以使用
(?<![^\sa-z])\d+(?![^\sa-z])
不区分大小写的版本:
(?i)(?<![^\sa-z])\d+(?![^\sa-z])
或者,使用 re.I
/ re.IGNORECASE
标志编译模式。
详情
(?<![^\sa-z])
- 如果紧靠左侧没有空格或小写字母(如果(?i)
或re.I
是任何 ASCII 字母,则匹配失败的负后视使用)\d+
- 1+ 位数(?![^\sa-z])
- 如果紧靠右侧没有空格或小写字母(如果(?i)
或re.I
是任何 ASCII 字母,则匹配失败的否定前瞻使用)