[英]regex capture numbers after varied lengths of spaces
我嘗試使用一個非捕獲組來檢測空格(在我需要的數字之前),而不是在結果中加入空格,因此我使用
(?:1 +)\\ d *。?\\ d *
處理我的文字:
input: kMPCV/epS4SgFoNdLo3LOuClO/URXS/5 134.686356921 2018-06-14 21:50:35.494
input: pRVh7kPpFbtmuwS1NILiCzwHUVwJ4NcK 839.680408921 2018-06-14 22:13:39.996
input: Ga7MIXmXAsrbaEc1Yj60qYYblcRQpnpz 4859.688276920 2018-06-14 23:02:11.125
input: 4mqdb5njytfDOFpgeG3XS0Iv1OXFPEnb 1400.684675920 2018-06-14 23:33:42.031
並嘗試獲取數字。
但是第2行和第3行返回無結果,第1行和第4行返回前有1個空格的數字:“ 134.686356921”
為什么我得到不同的結果? 代碼如下:
import re
def calcprice(filename):
try:
print ('ok')
f = open(filename, 'r')
data = f.read()
rows = data.split('\n')
for row in rows:
print (re.search("[(?: 1+)\d*\.?\d*][1]",row))
except Exception as e:
print(e)
if __name__ == "__main__": ## If we are not importing this:
calcprice('dfk balance.txt')
結果:
<_sre.SRE_Match對象; span =(52,66),match ='134.686356921'>
沒有
沒有
<_sre.SRE_Match對象; span =(51,66),match ='1400.684675920'>
您當前的正則表達式基本上是一個大字符集 :
[(?: 1+)\d*\.?\d*]
沒什么意義,似乎是對正則表達式工作原理的誤解。 如果要匹配數字,則往后看幾個空格,匹配數字和句點,然后再看另外兩個空格可能更有意義:
(?<= )[\d.]+(?= )
https://regex101.com/r/NRnXWb/1
for row in rows:
print (re.search(r"(?<= )[\d.]+(?= )",row))
您的正則表達式[(?: 1+)\\d*\\.?\\d*][1]
包含或是字符類的 2倍。
如果您要匹配的數字始終包含一個點,則可以使用單詞邊界和正向前瞻來斷言其后是空白:
如果也可能沒有點,則可以使用lookrounds檢查前導空格和尾隨空格,並使與點和一個或多個倍數匹配的部分為可選(?:\\.\\d+)?
。
嘗試正則表達式\\b(\\d+[\\d\\.]*)\\b
您的正則表達式與您要執行的操作不一致。這是非常錯誤的。
嘗試以下模式: +(\\d+(\\.\\d+)?) +
。
說明:pattern將匹配前面的數字,后跟一個或多個空格( +
)。 它將匹配具有可選小數部分( (\\.\\d+)?
)的數字,這將成為匹配項中的第二個捕獲組(但無論如何您都不需要它)。
在每場比賽中,第一個捕獲組\\1
將是您的號碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.