正则表达式:查找整数而不是浮点数
本文关键字:浮点数 整数 查找 正则表达式 | 更新日期: 2023-09-27 18:13:49
我想要一个正则表达式模式来查找字符串中的任何整数,但不是浮点数(小数点为"."或",")。所以for string:
abc111.222dfg333hfg44.55
应该只找到:
333年我创建了regex模式:
(?<!''d[''.,]|''d)''d+(?![''.,]''d+|''d)
,但在c++ STL正则表达式中使用时失败。它抛出异常:
Unhandled exception at at 0x76AF4598 in xxxxxx.exe: Microsoft C++ exception: std::regex_error at memory location 0x00C1F218.
但是它在c# Regex类
中工作得很好更新:
我代码:smatch intMatch;
regex e1("(?<!''d[''.,]|''d)''d+(?![''.,]''d+|''d)");
string s("111.222dfg333hfg44.55");
regex_search ( s, intMatch, e1 );
但是会抛出异常:
regex e1("(?<!''d[''.,]|''d)''d+(?![''.,]''d+|''d)");
更新2:两个答案都是正确的,但对于c++ STL正则表达式Toto一个更好。
我不确定c++ STL,但许多正则表达式不支持可变长度负向后看。
在你的情况下,你可以简单地做:
(?:^|[^.,'d])('d+)(?:[^.,'d]|$)
由于不同语言/版本等使用的正则表达式风格可能存在许多差异。,我会尝试用基本的正则表达式函数来处理这个问题,大多数版本都支持,比如:
'd+[,.]'d+|('d+)
演示它只使用替代和组捕获,没有查找。整数被捕获到第一组
首先,您需要知道在像[]这样的一组字符中不应该转义元字符,因此您必须写[.,]
而不是[''.,]
。我试过下面的程序,它似乎找到了正确的匹配
std::string in = "abc111.222dfg333hfg44.55";
boost::regex re("(?<!(''d[.,]|.''d))''d+(?![.,''d])");
boost::sregex_iterator it(in.begin(), in.end(), re);
boost::sregex_iterator end;
for( ;it!=end; ++it)
{
boost::smatch s = *it;
std::cout << s[0] << std::endl;
}