首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Regex -在C#中处理浮点数时,减号不会被捕获。

Regex -在C#中处理浮点数时,减号不会被捕获。
EN

Stack Overflow用户
提问于 2013-09-10 01:29:25
回答 3查看 292关注 0票数 0

我试图从以下字符串(名为临时)中提取2个数字:

代码语言:javascript
复制
"location" : { "lat" : 42.3875968, "lng" : -71.0994968 },

下面是我在C#中使用的代码:

代码语言:javascript
复制
// define a regex for float numbers
Regex rx = new Regex(@"\b-?[0-9]*\.?[0-9]+\b", RegexOptions.Compiled | RegexOptions.IgnoreCase);
// Find matches.
MatchCollection matches = rx.Matches(interim);

return matches[0].ToString() + ", " + matches[1].ToString();

返回的是"42.3875968,71.0994968",没有第二个浮点数的减号。

我在代码中进行了调试,该代码可以确认"-“不在匹配var的结果中。

我还测试了以下regexes,以获得相同的结果:

代码语言:javascript
复制
[-+]?[0-9]*\.?[0-9]+
(-|+)?[0-9]*\.?[0-9]+
(-|\+)?[0-9]*\.?[0-9]+
(-\+)?[0-9]*\.?[0-9]+

有人知道为什么这不管用吗?

谢谢你,美罗

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-09-10 02:02:02

我怀疑您的问题是,表达式开头和结尾处的\b并不是您真正想要的。如果您删除它们并只使用@"-?[0-9]*\.?[0-9]+,它就会工作“。

他们所做的就是确保单词和非单词字符之间有一个界限.这几乎肯定不是你想要的。

票数 2
EN

Stack Overflow用户

发布于 2013-09-10 01:48:45

您的正则表达式在上面正在读取的字符串的代码中是错误的。如果您为c#使用regex测试器,您将看到上面的regex "\b-?[0-9]*\.?[0-9]+\b"不包含减号。如果您将其稍微更改为"\b*-?[0-9]*\.?[0-9]+\b",那么您将在匹配中捕获-符号。

来源:http://regexhero.net/tester/

票数 0
EN

Stack Overflow用户

发布于 2013-09-10 03:16:34

另一些人则说“b”造成了问题。你可能只需要这样的东西:

代码语言:javascript
复制
 // ([-+]?[0-9]*\.?[0-9]*(?<=\d\.|\d))

 (                                  # (1 start)
      [-+]? [0-9]* \.? [0-9]* 
      (?<= \d \. | \d )
 )                                  # (1 end)

编辑:我的登录评论被打断了。

@JNYRanger

代码语言:javascript
复制
 \b*-?[0-9]*\.?[0-9]+\b

B*意思是可选择地永远匹配一个单词边界。

\b?意思是可选地匹配一个单词边界一次。

B指一次匹配一个词的边界。

B是一个零宽度断言,如果它是可选的,通常不包括它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18709445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档