【发布时间】:2015-11-04 11:40:44
【问题描述】:
我正在寻找一个正则表达式来查找字符串中的数字;如果我有这样的字符串:
li 12.12 si 43,23 45 31 uf 889 uf31 3.12345
我只想找到数字:
12.12 45 31 889 3.12345
我尝试了以下模式:
((\\+|-)?[[:digit:]]+)(\\.(([[:digit:]]+)?))?
但输出包括uf31 和43,23。
我试过了:
(?!([a-z]*((\\+|-)?[[:digit:]]+)(\\.(([[:digit:]]+)?))?[a-z]*))?((\\+|-)?[[:digit:]]+)(\\.(([[:digit:]]+)?))?
但这给出了相同的结果。
解决办法是什么?
解决方案 留给后代解决方案:
- 如果您正在寻找不使用正则表达式的简单有效的解决方案,请参阅Jonathan Mee's post below
-
如果您正在寻找使用 RegEx 的解决方案,请参阅 the wonderful regex from stribizhev
R"((?:^|\s)([+-]?[[:digit:]]+(?:\.[[:digit:]]+)?)(?=$|\s))"
【问题讨论】:
-
您能否定义要用于分隔符的内容?我了解您确实不想要包含除空格分隔的数字以外的任何内容。对吗?
-
你要支持
.5吗? -
科学记数法怎么样?您需要具体说明您希望能够捕获的内容。您的示例字符串不包含 + 或 - 并且您没有在文本中提及它们,但您的正则表达式尝试这样做。
-
@stribizhev 如果 OP 明确表示他在寻找什么,我不介意提供支持。
-
@user3641602:对不起,我不明白你的回答。打印'5'??
标签: c++ regex string c++11 numbers