簡體   English   中英

python regex替換重復模式“數字和空格”

[英]python regex to replace repetitive pattern “number and space”

input = 3136 -2 1806481261 191415576 883713178 259822501 0 79439 0 0 0

我想從上述輸入中提取值259822501。

我可以使用以下正則表達式將其提取:

\d+\s-?\d+\s+\d+\s+\d+\s+\d+\s+(\d+)[\d\\s]+.*

如果您在上述正則表達式中清楚看到,則模式“ \\ d + \\ s +”是重復的。

在這里尋找更有效的正則表達式。

您可以使用帶有重復運算符{}的(未捕獲)組來避免重復,之后再指定重復次數:

^(?:-?\d+\s+){5}(\d+)

由於259822501-?\\d+\\s+ 5次重新259822501之后出現,因此我使用了{5} 現在,捕獲的組1將具有您想要的輸出。

例:

In [39]: s
Out[39]: '3136 -2 1806481261 191415576 883713178 259822501 0 79439 0 0 0'

In [40]: re.search(r'^(?:-?\d+\s+){5}(\d+)',  s).group(1)
Out[40]: '259822501'
\d+\s+\d+\s+\d+\s+\d+\s+

可以由

(?:\d+\s+){4}
  • (?:對於非捕獲組

可以在regex101上檢查 ,但是由於后面的[\\ d \\ s]導致最后一位數字有問題

假設輸入是一個由空格分隔的字符串,並且基於正則表達式,要提取的數字具體是第6個數字,則可以使用split()和索引:

>>> input = '3136 -2 1806481261 191415576 883713178 259822501 0 79439 0 0 0'
>>> input.split()
['3136', '-2', '1806481261', '191415576', '883713178', '259822501', '0', '79439', '0', '0', '0']
>>> input.split()[5]
'259822501'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM