C# 正则表达式-在C中处理浮点数时,减号不会被捕获#

C# 正则表达式-在C中处理浮点数时,减号不会被捕获#,c#,regex,C#,Regex,我试图从以下字符串中提取2个数字(名为中间): 下面是我在C#中使用的代码: 返回值为“42.3875968,71.0994968”,第二个浮点数不带减号 我调试了一段代码,可以确认matches var的结果中没有“-” 为了获得相同的结果,我还测试了以下正则表达式: [-+]?[0-9]*\.?[0-9]+ (-|+)?[0-9]*\.?[0-9]+ (-|\+)?[0-9]*\.?[0-9]+ (-\+)?[0-9]*\.?[0-9]+ 有人知道为什么这样不行吗 谢谢, Mylo对于您正

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

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

返回值为“42.3875968,71.0994968”,第二个浮点数不带减号

我调试了一段代码,可以确认matches var的结果中没有“-”

为了获得相同的结果,我还测试了以下正则表达式:

[-+]?[0-9]*\.?[0-9]+
(-|+)?[0-9]*\.?[0-9]+
(-|\+)?[0-9]*\.?[0-9]+
(-\+)?[0-9]*\.?[0-9]+
有人知道为什么这样不行吗

谢谢,
Mylo

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


来源:

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


它们所做的是确保单词和非单词字符之间存在边界。这几乎肯定不是您想要的。

其他人说\b造成了问题。 你可能只需要这样的东西:

 // ([-+]?[0-9]*\.?[0-9]*(?<=\d\.|\d))

 (                                  # (1 start)
      [-+]? [0-9]* \.? [0-9]* 
      (?<= \d \. | \d )
 )                                  # (1 end)
\b*表示可以选择永远匹配单词boundry。
\b?表示有选择地匹配单词边界一次。
\意思是匹配一个单词边界一次


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

为什么您要尝试解析JSON结果?为什么您不使用一个可用的JSON库来读取它?我将提供一个使用JSON库而不是正则表达式的投票。如果您试图手动执行此操作,您将非常痛苦。还应添加
-
不是单词字符,这是一个常见的误解。
[-+]?[0-9]*\.?[0-9]+
(-|+)?[0-9]*\.?[0-9]+
(-|\+)?[0-9]*\.?[0-9]+
(-\+)?[0-9]*\.?[0-9]+
 // ([-+]?[0-9]*\.?[0-9]*(?<=\d\.|\d))

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