Python 正则表达式在不同长度的空间后捕获数字
我尝试使用一个非捕获组来检测空格(在我需要的数字之前),并且不将空格带入我的结果中,所以我使用 (?:1+)\d*?\d* 要处理我的文本:Python 正则表达式在不同长度的空间后捕获数字,python,regex,Python,Regex,我尝试使用一个非捕获组来检测空格(在我需要的数字之前),并且不将空格带入我的结果中,所以我使用 (?: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 in
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')
结果:
没有
没有
您当前的正则表达式基本上是一个大字符集: 这没有多大意义,看起来像是对正则表达式工作原理的误解。如果您想匹配数字,则可能需要在后面查找两个空格,匹配数字和句点,并在前面查找另两个空格:
(?<= )[\d.]+(?= )
(?您的正则表达式由一个
如果要匹配的数字始终包含一个点,则可以使用a和正数来断言后面的是空白:
如果它也可以没有点,您可以使用lookrounds检查前导空格和尾随空格,并使匹配点和一个或多个数字的部分可选(?:\。\d+)
尝试正则表达式\b(\d+[\d\.]*)\b
您的正则表达式与您尝试执行的操作不一致。这是非常错误的。尝试以下模式:+(\d+(\。\d+)+)+
说明:模式将匹配前面的数字和后面的一个或多个空格(+
)。它将匹配带有可选小数部分((\.\d+)
)的数字,这将成为匹配中的第二个捕获组(但您无论如何都不需要它)
在每次比赛中,第一个捕获组\1
将是您的号码
如果您的文件格式是固定的,您可以使用split()
来代替正则表达式。好的,find 1+是完全错误的。。
(?<= )[\d.]+(?= )
for row in rows:
print (re.search(r"(?<= )[\d.]+(?= )",row))