多次匹配非捕获组

时间:2019-10-02 18:25:04

标签: python regex python-regex

我真的很努力地打出一个好标题,但是我不确定我是否要求这个权利。这是我的最佳尝试:

我正在使用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]代替单词边界,因为15x20是两个不同的值。

但是15x20情况下,它不能同时匹配15和20。如果我在15x 20中放入多余的空间,它确实可以工作。我如何告诉它在结束时“重置”非捕获组,以便它在开始时也适用于非捕获组?

1 个答案:

答案 0 :(得分:1)

您可以使用

array([[1, 2],
       [3, 6],
       [4, 5],
       [6, 7]])

不区分大小写的版本:

(?<![^\sa-z])\d+(?![^\sa-z])

或者,使用(?i)(?<![^\sa-z])\d+(?![^\sa-z]) / re.I标志编译模式。

请参见regex demo

详细信息

  • re.IGNORECASE-如果在紧靠左侧没有空格或小写字母(如果使用(?<![^\sa-z])(?i)的任何ASCII字母),则后面的否定性查找将使匹配失败
  • re.I-1个以上数字
  • \d+-如果在紧靠右边没有空格或小写字母(如果使用(?![^\sa-z])(?i),则为ASCII字母)的否定超前匹配失败
相关问题