正则表达式,用于在逗号分隔的字符串中查找浮点数

时间:2018-08-15 15:06:46

标签: python regex regex-lookarounds regex-group regex-greedy

我有一个csv文件,该文件以逗号分隔,如下所示:

"22.0,asc1.0$*xyz,12.00,12.00023000,,1.0asc1.0,,-12.4442,0.00000,5.2E-5\n"

我只想查找所有浮点数。

挑战:

  • “ asc1.0 $ * xyz”-具有十进制但前缀/后缀为非数字的字符串应被忽略
  • “ 5.2E-5”-应将指数形式视为好结果
  • 应该为第一个没有逗号开头的项目和最后一个没有逗号结尾的项目工作。

此表达式正确捕获了浮动部分,但不适用于上述情况:

[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?

谢谢!

使用python完成代码(基于以下反馈):

import pandas as pd
from io import StringIO

data = {"a": 1.0, "b": "xyz.2.0", "c": "lol"}

buffer = StringIO()

df = pd.DataFrame([data])
df.to_csv(buffer, index=False)
input_ = buffer.getvalue()
print(input_)

import re

expression = "(?<=,|^)[+-]?\d+\.?\d*(?:E[+-]?\d+)?(?=,|$)"

def transform_float(m):
    value = m.group()
    print(value)
    return value

result = re.sub(expression, transform_float, input_)
print(result)

1 个答案:

答案 0 :(得分:2)

您可以将此正则表达式与环视一起使用:

(?:(?<=,)|(?<=^))[+-]?\d+\.?\d*(?:E[+-]?\d+)?(?=,|$)

RegEx Demo

RegEx说明:

  • (?:(?<=,)|(?<=^)):在后面断言我们前面的位置有逗号或行开头
  • [+-]?\d+\.?\d*(?:E[+-]?\d+)?:将整数或浮点数与可选 E部分
  • 匹配
  • (?=,|$):先行断言我们前面有逗号或行结尾
相关问题