多次匹配非捕获组

2024-09-30 00:31:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我真的很努力地想得到一个好的标题,但我不确定我是否问得对。以下是我最好的尝试:

我使用的是python风格的regex

我需要使用命名组匹配数字:

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中添加一个额外的空间,它确实可以工作。如何让它在最后“重置”非捕获组,以便在开始时也对非捕获组起作用?你知道吗


Tags: 标题风格sa空间情况数字单词命名
1条回答
网友
1楼 · 发布于 2024-09-30 00:31:47

你可以用

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

不区分大小写版本:

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

或者,用re.I/re.IGNORECASE标志编译模式。你知道吗

参见regex demo

细节

  • (?<![^\sa-z])-如果紧靠左侧没有空格或小写字母(如果使用(?i)re.I则为任何ASCII字母),则匹配失败的负查找
  • \d+-1+位
  • (?![^\sa-z])-如果右侧没有空格或小写字母(如果使用(?i)re.I则为任何ASCII字母),则匹配失败的负向前看

相关问题 更多 >

    热门问题