我正在努力实现的目标:
假设一个示例字符串:
1 this is a1 my test 1a 12 string 12.123 whatever 1
我想要一个正则表达式,它会给我所有出现的数字(包括浮点数),但是如果一个字母(或更一般地说:非数字)在它之前或之后,我希望它跳过该数字。因此a1
和1a
不匹配。
我一直在努力解决这个问题,我到了这一点(不理想,因为它也捕获了前面的空间):
/(^|\s)\d*\.*\d+/g
但这也会抓住1a
实例......我也可以设置类似的内容,跳过1a
,但会抓住a1
...
我可以使用正则表达式匹配来完成此操作吗?
答案 0 :(得分:1)
答案 1 :(得分:0)
对于一个简单但不全面的解决方案(假设在给定的示例字符串中使用数字类型,没有负数,科学记数法等),请尝试:
\d*\.*\d+
它从您开发的正则表达式中删除\s
,它与前面的空格匹配。
\d*
将匹配所有数字(数字[0-9])。
添加\.*\d+
将匹配浮点数(十进制后跟数字[0-9])。
答案 2 :(得分:0)
这不是一个正则表达式的答案,但也许这是一件好事,我们会看到。
此处使用的正则表达式为/^[-+]?(?:\d+(?:\.\d*)?|\d*\.\d+)(?:e\d+)?$/
:
var testStr = '.1 this is a1 my test +5 1a 12 string -2.4 12.123 whatever . .02e1 5e5.4 1 1.4e5 1.2.3';
console.log('matches');
console.log(...testStr
.trim()
.split(/\s+/g)
.filter(word => /^[-+]?(?:\d+(?:\.\d*)?|\d*\.\d+)(?:e\d+)?$/
.test(word)
)
);
console.log('mismatches');
console.log(...testStr
.trim()
.split(/\s+/g)
.filter(word => !/^[-+]?(?:\d+(?:\.\d*)?|\d*\.\d+)(?:e\d+)?$/
.test(word)
)
);

答案 3 :(得分:0)
试试这个词:Collections.synchronizedList(new ArrayList<YourClassNameHere>())
- Regex demo
支持JavaScript:(?<=^|\s)[-+]?(?:[0-9]*\.[0-9]+|[0-9]+)(?=$|\s)
- Regex demo
此表达式支持带有可选符号的浮点数。
JS不支持积极的lookbehind,因此被非捕获组取代。这些数字由第一组捕获。