我正在尝试从Matlab中的字符串中读取几个数字。目的是做事情str2num
,但是不使用eval
(并且不那么先进)。
我已经有一个用于匹配有效双精度数的正则表达式:
'([-+]?([0-9]*\.[0-9]+|[0-9]+\.|[0-9]+)([eE][-+]?([0-9]*\.[0-9]+|[0-9]+\.|[0-9]+))?)'
对于有效的子字符串,例如“ 1.15e2.4”,它的工作原理很好。我的问题是我想避免匹配无效的子字符串,例如“ 1.15.e2.4”(分为“ 1.15”和“ 2.4”)。
当我只匹配整个单词(使用\<
和\>
)时,无效的字符串将拆分为“ 1.15”和“ 4”),因为小数点被认为是二进制单词。
现在,我使用环顾四周的表达式:
'((?<=^|[ :,])[-+]?([0-9]*\.[0-9]+|[0-9]+\.|[0-9]+)([eE][-+]?([0-9]*\.[0-9]+|[0-9]+\.|[0-9]+))?(?=$|[ :,]))'
但我想知道是否有一种更简单,更通用的方法。
是否可以重新定义哪些字符被视为单词边界?
您无法重新定义单词边界的含义。但是,您可以通过使用负面的环视效果达到相同的效果:
(?<!\.)\< your first regex here \>(?!\.)
它不比第二个正则表达式简单得多,但是更健壮,因为它完全按照它所说的那样:不允许.
作为单词边界。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句