[英]Python Regex - optional match, do not capture one match
我正在嘗試尋找一種優雅的方式來同時匹配負數和正數,但不能在捕獲-號時捕獲+號。
所以我有這樣的事情:
re.findall("([+-] \d+)x", "6x2 + 4x + 5 - 2x2 - 7x + 4 + 87x - 100x")
這給了我x的所有乘數,包括正數和負數(太好了!)。 例如,我希望負數為- 2
,但不返回正數的加號( 4
而不是+ 4
)。 我無法使用?:
選項,也許我只是使用不正確。
您可以利用交替和正向和向前和向后移動:
(?<=\\+) \\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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.