如何找到两个特定字符串之间的数字?

问题描述:

我有以下的字符串:如何找到两个特定字符串之间的数字?

{ 
    "_matrix":[ 
     { 
     "__FRAMEWORK_ANY_SPEC__":"namesdeleted.mumbojumbo`1[[System.Double, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]", 
     "value":0 
     }, 
     { 
     "__FRAMEWORK_ANY_SPEC__":"namesdeleted.mumbojumbo`1[[System.Double, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]", 
     "value":1 
     }, 
     { 
     "__FRAMEWORK_ANY_SPEC__":"namesdeleted.mumbojumbo`1[[System.Double, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]", 
     "value":0 
     }, 
     { 
     "__FRAMEWORK_ANY_SPEC__":"namesdeleted.mumbojumbo`1[[System.Double, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]", 
     "value":-1 
     }, 
     { 
     "__FRAMEWORK_ANY_SPEC__":"namesdeleted.mumbojumbo`1[[System.Double, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]", 
     "value":-.1 
     }, 
     { 
     "__FRAMEWORK_ANY_SPEC__":"namesdeleted.mumbojumbo`1[[System.Double, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]", 
     "value":1.1 
     }, 
     { 
     "__FRAMEWORK_ANY_SPEC__":"namesdeleted.mumbojumbo`1[[System.Double, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]", 
     "value":0 
     }, 
     { 
     "__FRAMEWORK_ANY_SPEC__":"namesdeleted.mumbojumbo`1[[System.Double, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]", 
     "value":0 
     }, 
     { 
     "__FRAMEWORK_ANY_SPEC__":"namesdeleted.mumbojumbo`1[[System.Double, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]", 
     "value":.1 
     }, 
     { 
     "__FRAMEWORK_ANY_SPEC__":"namesdeleted.mumbojumbo`1[[System.Double, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]", 
     "value":0 
     }, 
     { 
     "__FRAMEWORK_ANY_SPEC__":"namesdeleted.mumbojumbo`1[[System.Double, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]", 
     "value":1 
     }, 
     { 
     "__FRAMEWORK_ANY_SPEC__":"namesdeleted.mumbojumbo`1[[System.Double, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]", 
     "value":0 
     }, 
     { 
     "__FRAMEWORK_ANY_SPEC__":"namesdeleted.mumbojumbo`1[[System.Double, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]", 
     "value":0 
     }, 
     { 
     "__FRAMEWORK_ANY_SPEC__":"namesdeleted.mumbojumbo`1[[System.Double, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]", 
     "value":0 
     }, 
     { 
     "__FRAMEWORK_ANY_SPEC__":"namesdeleted.mumbojumbo`1[[System.Double, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]", 
     "value":0 
     }, 
     { 
     "__FRAMEWORK_ANY_SPEC__":"namesdeleted.mumbojumbo`1[[System.Double, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]", 
     "value":1 
     } 
    ] 
} 

我主我需要"value":之后和下一个}值之间收集所有的数字可以是任何小数/整数。

我个人也喜欢它与科学计数法如果可能的话

我现在的正则表达式是:

(?<=("value":))(?:\d*.)?\d+(?=}) 

我在C#中使用它,所以?<=是有效的。

我现在的正则表达式是能够过滤以下类型的数字:

  • -1
  • 1.1
  • 0.1

我需要它也适应用于:

  • -.1

  • 科学记数法,所以如果有一种方法可以"value":和下}

+2

你的例子看起来像JSON。你难道不能解析JSON并获得你的价值吗? – Icemanind

+0

该字符串来自非托管代码。我不能在C#中使用任何字符串操作或正则表达式。 – BikerDude

+0

@BikerDude:是的,你可以。你可以将它解析到一个匹配的类(es)上,并从那里获取你的数据。 –

正如评论中所表达的,这看起来像JSON,你应该解析它,而不是尝试使用正则表达式。但是,如果你必须使用正则表达式,这样的事情似乎工作:

(?<=("value":))(?:-?\d*\.?)?\d+(?=}) 

的变化是增加-?覆盖可选的减号,改变你的.我以为应该到小数点匹配\.因为.在正则表达式中匹配任意字符,所以它需要被转义。然后,我添加了?以使其成为可选项。

https://regex101.com/r/drNrDS/1

如果你想支持像1.1e101.1e-3号码,然后你只需要添加一些可选的比赛:

(?<=("value":))(?:-?\d*\.?)?\d+(?:e|e-)?\d*(?=}) 

我们增加相匹配ee-(?:e|e-)?\d*接着是一些数字。

+0

任何可以用于科学记谱法的东西? – BikerDude

+0

不明白为什么我的不会为此工作,请使用内联修饰符查看我的更新答案 – DNKROZ

+0

@BikerDude:是的 - 请参阅我的编辑。 –

之间捕捉一切,我相信这将这样的伎俩: -

/(?s)(?<="value":)(.+?)(?=})/g (使用内联修饰符)

例如:https://regex101.com/r/drNrDS/2

enter image description here

+1

作品的格式化表示更新了您的问题!但被打到蜂鸣器。 – BikerDude

+0

@DNKROZ你使用过哪个工具? –

+0

@BerndOtt我用过:https://www.debuggex.com/ – DNKROZ