如何找到两个特定字符串之间的数字?
问题描述:
我有以下的字符串:如何找到两个特定字符串之间的数字?
{
"_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":
和下}
答
正如评论中所表达的,这看起来像JSON,你应该解析它,而不是尝试使用正则表达式。但是,如果你必须使用正则表达式,这样的事情似乎工作:
(?<=("value":))(?:-?\d*\.?)?\d+(?=})
的变化是增加-?
覆盖可选的减号,改变你的.
我以为应该到小数点匹配\.
因为.
在正则表达式中匹配任意字符,所以它需要被转义。然后,我添加了?
以使其成为可选项。
https://regex101.com/r/drNrDS/1
如果你想支持像1.1e10
和1.1e-3
号码,然后你只需要添加一些可选的比赛:
(?<=("value":))(?:-?\d*\.?)?\d+(?:e|e-)?\d*(?=})
我们增加相匹配e
或e-
(?:e|e-)?\d*
接着是一些数字。
答
你的例子看起来像JSON。你难道不能解析JSON并获得你的价值吗? – Icemanind
该字符串来自非托管代码。我不能在C#中使用任何字符串操作或正则表达式。 – BikerDude
@BikerDude:是的,你可以。你可以将它解析到一个匹配的类(es)上,并从那里获取你的数据。 –