Python 当格式不同时,如何使用re返回字符串? 问题导论
我在一个.txt文件中有输入,我想在给定速度时“提取”这些值。 输入的形式为:velocity\t\val1\t\val2…\tvalnPython 当格式不同时,如何使用re返回字符串? 问题导论,python,python-3.x,re,Python,Python 3.x,Re,我在一个.txt文件中有输入,我想在给定速度时“提取”这些值。 输入的形式为:velocity\t\val1\t\val2…\tvaln [...] 16\t1\t0\n 1.0000\t9.3465\t8.9406\t35.9604\n 2.0000\t10.4654\t9.9456\t36.9107\n 3.0000\t11.1235\t10.9378\t37.1578\n [...] 我做了什么 我编写了一段代码,用于在请求速度时返回值: def values(input,velocit
[...]
16\t1\t0\n
1.0000\t9.3465\t8.9406\t35.9604\n
2.0000\t10.4654\t9.9456\t36.9107\n
3.0000\t11.1235\t10.9378\t37.1578\n
[...]
我做了什么
我编写了一段代码,用于在请求速度时返回值:
def values(input,velocity):
return re.findall("\n"+str(velocity)+".*",input)[-1][1:]
它“向后”工作,因为我想忽略输入的第一行(16\t1\t0\n),如果调用:
>>>values('inputs.txt',16)
>>>16.0000\t0.5646\t14.3658\t1.4782\n
但是它有一个大问题:如果我调用函数1,它返回19.0000的值
因为我认为所有的输入都是相同的格式,所以我做了一些修正:
def values(input,velocity):
if velocity <= 5: #Because velocity goes to 50
velocity = str(velocity)+'.0'
return re.findall("\n"+velocity+".*",input)[-1][1:]
当然,我的解决方案不起作用
那么,有没有适合这两种输入的模式
谢谢你的帮助
另外,我有一个使用函数split('\n')
和索引的解决方案,但我想用re-library解决这个问题:
def values(input,velocity):
return input.split('\n)[velocity+1] #+1 to avoid first row
你可以用积极的前瞻来检查你的速度之后是否有一个周期或一个标签。这将阻止您在没有硬编码的情况下获取更多号码。必须有
.0
。这意味着速度1将能够匹配1或1.xxxxx
重新导入
从输入导入列表开始
def find_by_velocity(速度:int,数据:str)->List[str]:
返回关于findall(r“\n”+str(速度)+r”(?=\。\124;\ t)。*”,数据)
数据=“16\t1\t0\n1\t9.3465\t8.9406\t35.9604\n2\t10.4654\t9.9456\t36.9107\n3\t11.1235\t10.9378\t37.1578\n16\t1\t0\n1.0000\t9.3465\t8.9406\t35.9604\n2.0000\t10.4654\t9.9456\t36.9107\n3.0000\t11.1235\t10.9378\t37.1578\n”“””
打印(按速度查找速度(1,数据))
输出
['\n1\t9.3465\t8.9406\t35.9604','\n1.0000\t9.3465\t8.9406\t35.9604']
你可以用积极的前瞻来检查你的速度之后是否有一个周期或一个标签。这将阻止您在没有硬编码的情况下获取更多号码。必须有.0
。这意味着速度1将能够匹配1或1.xxxxx
重新导入
从输入导入列表开始
def find_by_velocity(速度:int,数据:str)->List[str]:
返回关于findall(r“\n”+str(速度)+r”(?=\。\124;\ t)。*”,数据)
数据=“16\t1\t0\n1\t9.3465\t8.9406\t35.9604\n2\t10.4654\t9.9456\t36.9107\n3\t11.1235\t10.9378\t37.1578\n16\t1\t0\n1.0000\t9.3465\t8.9406\t35.9604\n2.0000\t10.4654\t9.9456\t36.9107\n3.0000\t11.1235\t10.9378\t37.1578\n”“””
打印(按速度查找速度(1,数据))
输出
['\n1\t9.3465\t8.9406\t35.9604','\n1.0000\t9.3465\t8.9406\t35.9604']
您期望的输出是什么?输入是文件句柄吗?一根绳子?列表?@DirtyBit我的预期输出是:velocity\tval1\tval2\tvaln@ChrisDoyle输入它是一个.txt文件,但是,例如,它可以被视为字符串,在同一行的值之间有分隔符,比如results=re.findall(r“\n”+str(val)+r”(?=\。\t)。*”,data)
您期望的输出是什么?输入是文件句柄吗?一根绳子?列表?@DirtyBit我的预期输出是:velocity\tval1\tval2\tvaln@ChrisDoyle输入它是一个.txt文件,但例如,它可以作为字符串,在同一行的值之间使用分隔符,例如results=re.findall(r“\n”+str(val)+r”(?=\。\t)。*”,data)
def values(input,velocity):
return input.split('\n)[velocity+1] #+1 to avoid first row