用于在逗号分隔的字符串中查找浮点数的正则表达式
Regex for finding float numbers in a comma separated string
我有一个用逗号分隔行的 csv 文件,如下所示:
"22.0,asc1.0$*xyz,12.00,12.00023000,,1.0asc1.0,,-12.4442,0.00000,5.2E-5\n"
我只想查找所有浮点数。
挑战:
- "asc1.0$*xyz" - 有小数但 prefix/suffix 没有数字的字符串应该被忽略
- "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)
您可以将此正则表达式用于环顾四周:
(?:(?<=,)|(?<=^))[+-]?\d+\.?\d*(?:E[+-]?\d+)?(?=,|$)
正则表达式说明:
(?:(?<=,)|(?<=^))
:向后看以断言我们在之前的位置有一个逗号或行开始
[+-]?\d+\.?\d*(?:E[+-]?\d+)?
:用optionalE
part 匹配整数或浮点数
(?=,|$)
:先行断言我们前面有逗号或行尾
我有一个用逗号分隔行的 csv 文件,如下所示:
"22.0,asc1.0$*xyz,12.00,12.00023000,,1.0asc1.0,,-12.4442,0.00000,5.2E-5\n"
我只想查找所有浮点数。
挑战:
- "asc1.0$*xyz" - 有小数但 prefix/suffix 没有数字的字符串应该被忽略
- "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)
您可以将此正则表达式用于环顾四周:
(?:(?<=,)|(?<=^))[+-]?\d+\.?\d*(?:E[+-]?\d+)?(?=,|$)
正则表达式说明:
(?:(?<=,)|(?<=^))
:向后看以断言我们在之前的位置有一个逗号或行开始[+-]?\d+\.?\d*(?:E[+-]?\d+)?
:用optionalE
part 匹配整数或浮点数
(?=,|$)
:先行断言我们前面有逗号或行尾