如何考虑在正则表达式中以DOT为单位
How to consider taking dot in the number in regular expression
看以下正则表达式
std::regex reg("[A][-+]?([0-9]*\.[0-9]+|[0-9]+)");
这将找到任何字母,然后是浮点数。问题如果数字A30.
,则此正则表达式忽略点并将结果打印为A30
。我想强迫正则表达式考虑小数点。这是可行的吗?
#include <iostream>
#include <string>
#include <regex>
using namespace std;
int main()
{
std::string line("A50. hsih Y0 his ");
std::smatch match;
std::regex reg("[A][-+]?([0-9]*\.[0-9]+|[0-9]+)");
if ( std::regex_search(line,match,reg) ){
cout << match.str(0) << endl;
}else{
cout << "nothing found" << endl;
}
return 0;
}
您请求点之后是一个或多个( )数字。只需通过将其更改为:
来使尾随ditigs可选std::regex reg("[A][-+]?([0-9]*\.[0-9]*|[0-9]+)");
演示
此表达式的唯一问题是它也将匹配A,其次是一个没有任何数字的单点。我不知道您是否会看到这是有效的匹配。因此,更坚固的选择是:
std::regex reg("[A][-+]?([0-9]*\.[0-9]+|[0-9]+\.?)");
因此,尾数字或数字遵循点的dot。
第二个演示
您可以像这样更改正则
A[-+]?(?:[0-9]*\.?(?:[0-9]+)?)
-
A
-匹配A
。 -
[-+]?
-匹配+
或-
。(?使其可选) -
(?:[0-9]*\.?(?:[0-9]+)?)
-
(?:[0-9]*\.
-将匹配零或更多数字,然后是.
(?使其可选) -
(?:[0-9]+)?
-匹配一个或多个时间。(?使其可选)
-
demo
相关文章:
- 以天C++为单位的两个时间戳之间的差异
- 如何以毫秒为单位获取开始时间和 now() 之间的毫秒差异(以 C++为单位?
- 从原始字节解码协议缓冲区(以 C++为单位)
- 如何在 c++ 中确定一条指令(以字节为单位)在哪里结束,另一条指令从哪里开始?
- 编写以 C++ 为单位返回值的函数
- 以C++为单位进行运行长度编码
- 如何找到两个日期之间的时间差异(以秒和纳秒为单位)?
- arr[n] 是否以 C++ 为单位打印数组的长度?
- 字符串数组上的 sizeof 运算符以 C++ 为单位给出不同的输出
- 以 C++ 为单位具有输出限制的排列
- 以 GDB 为单位指定浮点精度
- 整数数据如何以位为单位存储在内存中?不是右对齐吗?
- 如何在没有硬编码的情况下以C++为单位获取类数组的长度?
- 指针引用的生存期(以 C++为单位)
- 以字符为单位设置控制台大小
- 获取嵌套 stl 容器的大小(以字节为单位)
- 有没有一种 STL 方法可以找到字符串的所有排列,给出一个以 C++ 为单位的大小?
- 二进制数组中最大连续 1 的起始和结束索引,以 C++ 为单位
- 正向声明的枚举,默认值以.h为单位
- 如何考虑在正则表达式中以DOT为单位