我正在尝试找到一种优雅的方式来同时匹配负数和正数,而不是在捕获-号的同时捕获+号。
所以我有类似的东西:
re.findall("([+-] \d+)x", "6x2 + 4x + 5 - 2x2 - 7x + 4 + 87x - 100x")
这给了我x的所有乘数,包括正数和负数(太好了!)。例如,我希望负数为- 2
,但不返回正数的加号(4
而不是+ 4
)。我无法使用?:
选项,也许是我使用不正确。
答案 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']
说明
(?<=\+) \d+(?=x)
,肯定在左边是+
,然后匹配一个空格,后跟一个或多个数字。使用积极的前瞻性断言右边的是x
|
或- \d+(?=x)
匹配-
,一个空格和一个或多个数字。然后使用积极的前瞻性断言右边的是x
如果您不想在比赛前没有+
,请在数字前将其删除,然后将其添加到后面的正数中。
(?<=\+ )\d+(?=x)|- \d+(?=x)