Python Regex-可选匹配项,不捕获一项匹配项

时间:2018-10-08 21:11:13

标签: python regex regex-lookarounds optional-parameters

我正在尝试找到一种优雅的方式来同时匹配负数和正数,而不是在捕获-号的同时捕获+号。

所以我有类似的东西:

re.findall("([+-] \d+)x", "6x2 + 4x + 5 - 2x2 - 7x + 4 + 87x - 100x")

这给了我x的所有乘数,包括正数和负数(太好了!)。例如,我希望负数为- 2,但不返回正数的加号(4而不是+ 4)。我无法使用?:选项,也许是我使用不正确。

1 个答案:

答案 0 :(得分:0)

您可以使用alternation和正向和向前和向后看:

(?<=\+) \d+(?=x)|- \d+(?=x)

print(re.findall("(?<=\+) \d+(?=x)|- \d+(?=x)", "6x2 + 4x + 5 - 2x2 - 7x + 4 + 87x - 100x"))
# [' 4', '- 2', '- 7', ' 87', '- 100']

Regex demo | Python demo

说明

  • (?<=\+) \d+(?=x),肯定在左边是+,然后匹配一个空格,后跟一个或多个数字。使用积极的前瞻性断言右边的是x
  • |
  • - \d+(?=x)匹配-,一个空格和一个或多个数字。然后使用积极的前瞻性断言右边的是x

如果您不想在比赛前没有+,请在数字前将其删除,然后将其添加到后面的正数中。

(?<=\+ )\d+(?=x)|- \d+(?=x)