我试图从以下字符串(名为临时)中提取2个数字:
"location" : { "lat" : 42.3875968, "lng" : -71.0994968 },下面是我在C#中使用的代码:
// 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,以获得相同的结果:
[-+]?[0-9]*\.?[0-9]+
(-|+)?[0-9]*\.?[0-9]+
(-|\+)?[0-9]*\.?[0-9]+
(-\+)?[0-9]*\.?[0-9]+有人知道为什么这不管用吗?
谢谢你,美罗
发布于 2013-09-10 02:02:02
我怀疑您的问题是,表达式开头和结尾处的\b并不是您真正想要的。如果您删除它们并只使用@"-?[0-9]*\.?[0-9]+,它就会工作“。
他们所做的就是确保单词和非单词字符之间有一个界限.这几乎肯定不是你想要的。
发布于 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/
发布于 2013-09-10 03:16:34
另一些人则说“b”造成了问题。你可能只需要这样的东西:
// ([-+]?[0-9]*\.?[0-9]*(?<=\d\.|\d))
( # (1 start)
[-+]? [0-9]* \.? [0-9]*
(?<= \d \. | \d )
) # (1 end)编辑:我的登录评论被打断了。
@JNYRanger
\b*-?[0-9]*\.?[0-9]+\bB*意思是可选择地永远匹配一个单词边界。
\b?意思是可选地匹配一个单词边界一次。
B指一次匹配一个词的边界。
B是一个零宽度断言,如果它是可选的,通常不包括它。
https://stackoverflow.com/questions/18709445
复制相似问题