我有一个正则表达式,它可以从文本中正确捕获所有浮点数和整数。它还避免字母数字文本。
Regex:/[+-]?[^a-zA-Z\n][^\s]/
但它在下面的一个测试用例中失败。
要求:
1.)捕获所有有效的整数和小数(包括带有正号+和负号-的整数)。1,1.0,-1.0,-1,.6,0.7,0,+.6,+.01均有效。7、不合法。.6未在下面的文本中使用上述正则表达式捕获
2.)避免像3E,171 A等文本........这个正则表达式除了这种情况外什么都做。它捕获文本11 A,17 E(但不是9 E,8B),下面的摘录中的文本10 E在这个正则表达式中被捕获,但不是9 W。这里也不需要10 E。必须避免任何格式为“NUMBERALPHABETs”的字符串
3.)不应捕获空白。不想在代码中不断地修剪[dataset可能很大,可以在java中使用string.trim(),但要避免它]
有什么建议吗?
下面的示例文本
la= -0.8 -0.7 -1.3 -1.6 -0.2 -0.9 -0.6 -0.7 -0.4 0.0
9W t= 32.611 32.599 32.588 32.577 32.565 32.531 32.519 32.508 32.496 32.485
a= 13.6 17.2 13.9 14.8 12.7 17.8 13.7 14.3 16.9 15.9
p= 16.2 17.9 17.7 16.5 14.8 20.3 16.7 17.1 21.1 17.8
la= 0.7 1. 0.7 0.8 0.6 0.9 1.0 2.0 1.8 0.9
t= 32.309 32.298 32.287 32.276 32.265 32.177 32.166 32.155 32.144 32.133
a= 12.1 13.4 17.5 17.0 0.0 14.5 14.7 14.7 16.7 14.5
p= 15.2 14.6 18.4 18.5 0.0 15.1 15.9 17.1 17.5 17.0
la= 0.9 .6 1.3 0.5 0.0 0.3 0.9 0.9 0.9 0.6
10E t= 32.658 32.646 32.635 32.623 32.612 32.577 32.566 32.555 32.543 32.532
a= 13.8 17.3 16.0 15.2 13.8 16.4 15.3 20.3 17.6 16.5
p= 15.2 18.0 17.4 17.1 15.6 17.7 18.0 23.2 19.1 18.8
字符串
正则表达式:/([^\s][\d])+(.\d+)?[^a-zA-Z][^\s]/执行所有操作,但在1、0.9等处失败.....未捕获第一个数字和最后一个数字。
任何帮助都是感激的。
2条答案
按热度按时间v64noz0r1#
您可以使用以下命令:第一个月
说明:
(?<!\S)
检查匹配的模式前面除了空白字符之外没有其他字符。相当于(<=\s|^)
,[+-]?
可选标志,(?:\d+|\d*\.\d+)
整数,或可选整数部分的浮点数,(?!\S)
(相当于(?=\s|$)
)与上一点匹配的数字后面应跟随空格符号(空格、制表符或换行符)。请注意,此符号已选中,但未包含在实际匹配中。演示here
bwntbbo32#
我得出以下结论:
字符串
(?<=(\s|^))
和(?=(\s|$))
是自定义的单词边界,这确保我们避免smth,如1.2e5或word123,其中1.2和123将是我们的匹配