Java 对字符串进行双重分析

Java 对字符串进行双重分析,java,regex,string,parsing,double,Java,Regex,String,Parsing,Double,这个问题是问题的继续。问题是regex“[-+]?\\d*\\.?\\d+([eE][-+]?\\d+)”无法正确查找双精度 例如,inputsdf9.99e.23不包含双精度,因为如果有[eE],后面必须是[+-]或仅仅是[0-9] 所以我需要一些正则表达式中的“如果”。在伪代码中是这样的:if(char[i]=(e | e)),然后if(char[i+1]=('+'|'-'))else返回null使用心灵感应(预期)扩展算法,并禁止数字、点、非数字作为数字,我可以建议这3个正则表达式。在同一

这个问题是问题的继续。问题是regex
“[-+]?\\d*\\.?\\d+([eE][-+]?\\d+)”
无法正确查找双精度

例如,input
sdf9.99e.23
不包含双精度,因为如果有[eE],后面必须是[+-]或仅仅是[0-9]

所以我需要一些正则表达式中的“如果”。在伪代码中是这样的:
if(char[i]=(e | e)),然后if(char[i+1]=('+'|'-'))else返回null

使用心灵感应(预期)扩展算法,并禁止数字、点、非数字作为数字,我可以建议这3个正则表达式。在同一字符串上连续使用它们,并统一(concat,append)结果


我尝试了一些方法将其组合到一个regexp中,但不幸的是它不起作用。

那么
sdf9.99f.23
是否包含一个(或两个)双精度表达式呢?我认为
sdf9.99e.23
包含两个双重值:
9.99
.23
。解析非结构化文本的整个问题在于它太容易解释。除非你有一个非常具体的定义,否则你总能找到一个可以争论的案例。@Helgus:但是为什么
e
如此特殊以至于它“打断”了字符串呢。为什么
f
不这样做?还是一片空白?为什么选择忽略任何其他格式错误的非数字,但这种特定情况会导致算法返回错误?在
1a
中找到
1
,在
1b
中找到
1
,在
1c
中找到
1
,在
1d
中找到
1
,但在
1e
中返回错误。这是为什么?那这有五个、三个、两个还是没有两个呢?@Helgus但是
e
也可能是一个普通的
e
这不是一个精确的定义。不幸的是,你的“正确”(根据评论)与其他人的不同。因此,您需要提供准确的定义。“像这样的字符串9.99e.23是错误的”不是完整准确的定义。抱歉,但如果我(或其他人)不会对每一个单词都吹毛求疵,你会得到不准确/错误的算法,或者根本不会得到。
"[+-]?\\d+((?![\d.])|$)" // ±digits w/o dot after them (actually, this is integer)
"[+-]?\\d+\\.\\d+((?![\deE])|$)" // ±digits, dot, digit w/o [eE] after them
"[+-]?\\d+\\.\\d+[eE][+-]?\\d+" // full variant: ±digits, dot, digits, "e", ±digits