在Visual C++中,我使用了这个正则表达式"^[0-9]+\.?[0-9]*$")来匹配一个双精度数或整数,但它似乎不起作用。有什么想法吗?这是我如何应用代码:
"^[0-9]+\.?[0-9]*$")
if (System::Text::RegularExpressions::Regex::IsMatch(e0, "^[0-9]+\.?[0-9]*$")){ e0_val = System::Convert::ToDouble(e0); }
rn0zuynd1#
正则表达式本身没有问题,问题在于你的转义。你需要对\字符进行双转义,因为它也是一个C++字符串转义字符。另外,这个正则表达式可能会认为1.是一个有效的浮点数,所以你最好使用/^[0-9]+(\\.[0-9]+)?$来消除这种可能性。
\
1.
/^[0-9]+(\\.[0-9]+)?$
xienkqul2#
上面的正则表达式并不完美,因为它接受的“09”不是有效数字。更好的表达式是:
"^(-?)(0|([1-9][0-9]*))(\\.[0-9]+)?$"
其中:
1. is an optional negative sign; 2. is zero or a valid non-zero integer; 4. is the optional fracture part;
理论上,fracture部分应该写成“(.[0-9]*[1-9])?”,因为数字不能有尾随零。实际上,源字符串可能是用固定位数创建的,例如:
printf("%.1f", x);
因此,它很容易以零字符结束。当然,这些都是定点表示,而不是双精度数本身。双精度数也可以写成-1.23e-4,而不是-0.000123。
2cmtqfgy3#
/^[0-9]+.[0-9]+$:用这个来加倍。
接受123.123类型。
piztneat4#
也许不是直接的答案,只是有用的信息。regexp:
std::regex rx(R"(^([+-]?(?:[[:d:]]+\.?|[[:d:]]*\.[[:d:]]+))(?:[Ee][+-]?[[:d:]]+)?$)");
匹配字符串:
"1", "0", "10", "1000.1", "+1", "+10", "-10", "1.", ".1", "1.1", "+1.", "-1.", "+.1", "-.1", "009", "+009", "-009", "-01e0", "+01E0", "+1e-1", "+1e+1", "+1.e1", "1E1", "1E+1", "0.001e-12", "0.111111111111111"
并且不匹配以下字符串:
".", "1a", "++1", "+-1", "+", "-.", "-", "--1.", "1.e.1", "1e.1", "0+.e0"
前几个看起来像是C++中double类型的有效值,例如double test = +009.e+10是OK。在www.example.com中播放ideone.com:https://ideone.com/ooF8sG
double
double test = +009.e+10
olqngx595#
(\d+)?\.(\d+)?
上述正则表达式适用于双精度浮点数,如**“45.5”、“12."、".12”**
4nkexdtk6#
/^[0-9]*[.]?[0-9]+$/
上述正则表达式适用于双精度浮点数,如“45.5”、“12”、“.12”
6条答案
按热度按时间rn0zuynd1#
正则表达式本身没有问题,问题在于你的转义。你需要对
\
字符进行双转义,因为它也是一个C++字符串转义字符。另外,这个正则表达式可能会认为
1.
是一个有效的浮点数,所以你最好使用/^[0-9]+(\\.[0-9]+)?$
来消除这种可能性。xienkqul2#
上面的正则表达式并不完美,因为它接受的“09”不是有效数字。更好的表达式是:
其中:
理论上,fracture部分应该写成“(.[0-9]*[1-9])?”,因为数字不能有尾随零。实际上,源字符串可能是用固定位数创建的,例如:
因此,它很容易以零字符结束。当然,这些都是定点表示,而不是双精度数本身。双精度数也可以写成-1.23e-4,而不是-0.000123。
2cmtqfgy3#
/^[0-9]+.[0-9]+$:用这个来加倍。
接受123.123类型。
piztneat4#
也许不是直接的答案,只是有用的信息。regexp:
匹配字符串:
并且不匹配以下字符串:
前几个看起来像是C++中
double
类型的有效值,例如double test = +009.e+10
是OK。在www.example.com中播放ideone.com:https://ideone.com/ooF8sG
olqngx595#
上述正则表达式适用于双精度浮点数,如**“45.5”、“12."、".12”**
4nkexdtk6#
上述正则表达式适用于双精度浮点数,如“45.5”、“12”、“.12”