如何在 C# 中修复正则表达式

Posted

技术标签:

【中文标题】如何在 C# 中修复正则表达式【英文标题】:How to fix Regex in C# 【发布时间】:2020-11-06 14:33:03 【问题描述】:

表演时:

WebClient client = new WebClient();
string input = client.DownloadString("https://blockchain.com/btc/address/1Q72ZCfpxcCgzxbYypVdFmuwA3yi7RLYqs");
MatchCollection matchList = Regex.Matches(input, @"\[""txid"":""(.*)"",""size""");
textBox3.AppendText(matchList[0] + Environment.NewLine);

从区块链中获取 TXID 参数,如果有多个事务而不是返回多个集合,它将获取["txid" 的第一个实例和"size" 的最后一个实例之间的所有内容 我想要一个输出数组,例如matchList[0] = first txid no。 && matchList[1] = second txid no. 等等。现在我收到了

matchList[0] = ["txid":"0ca6af3928549b977a4777924512f0665152617d2fece5e23d283d071b2beadb","size":191,"version":1,"locktime":0,"fee":11194,"inputs":["coinbase":false,"txid":"56273bfc7a26c544c8e13753dfc7eae83ad1f02814daef794977aa387ee427ab","output":679,"sigscript":"47304402200371a16fd5c97e534351068b51f1eff520cb48388ffd8eeeeff27263aa802f0002202ed64c87706446bb3300d4a0a7926e7e98cd72791056b9e79e9d1359619c3482012102312f378fb165556de77c3177061c2a930a14a10b72bf5c83e30f19f6d33375b4","sequence":4294967295,"pkscript":"76a9143624ef002f2d01d6414a0448e7b1af18cd0fd31288ac","value":23159,"address":"15wHjYuc3KY9kVNzkEYzrq7mG9yuQWbzhw","witness":null],"outputs":["address":"1Q72ZCfpxcCgzxbYypVdFmuwA3yi7RLYqs","pkscript":"76a914fd6eafdfb79b40925b114f1dcb32e750586b119388ac","value":11965,"spent":false,"spender":null],"block":"height":639529,"position":2069,"deleted":false,"time":1594918670,"rbf":false,"weight":764,"txid":"7e90a4c2e1103861291731288bd2c05198873ad05a73b9f0f40380f747160d42","size"

【问题讨论】:

你知道deserializing 一个json 字符串吗?您可以像我想象的那样将其反序列化为一个对象数组,然后获取数组中每个元素的txid @RyanWilson:看起来他正在从一个包含 JSON 字符串的网站上抓取该字符串。字符串本身不可解析为 JSON。 说到这里,你尝试做的可能是不合法的,因为它违反了terms and conditions 使用 blockchain.com:“13.2 Blockchain.com 服务的可接受使用访问或使用服务,您同意您在访问和使用我们的服务时对您的行为负全部责任。在不限制上述一般性的情况下,您同意您不得:...使用任何机器人、蜘蛛、爬虫、刮板或其他我们未提供用于访问我们的服务或提取数据的自动化方式或界面” 如果您知道另一种方法,我可以使用 C# 获取交易的 txid,我将使用该方法,但我不知道任何其他方法,这也是手动而不是自动的,所以我不会破坏任何服务条款,即使是通过应用程序,它也不会只刮取许多地址 但是,不管合法与否,如果你得到完整的字符串,它很可能是 JSON。解析 JSON 并获得您要查找的内容很容易。不推荐使用 Regex 解析 JSON 【参考方案1】:

这将匹配 object 开头的 taxid 名称。 它的字符串 Value 在第 1 组中。name=value 后跟 size 名称。注意有任何地方都不允许有空格。

@"""txid"":""([^""]*?)"",""size"""

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

请注意,如果需要解析完整的 JSON、部分、修复或其他方式 使用 C# 正则表达式,我有一个关于如何做到这一点的教程。告诉我。

【讨论】:

以上是关于如何在 C# 中修复正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中使用正则表达式从字符串中提取域名?

如何在 C# 中使用正则表达式检索选定的文本?

如何修复这个正则表达式?

在 C# 中使用正则表达式从完整路径解析文件名

如何在 C# 中使用正则表达式解析重复的名称-值对

如何将 C# 正则表达式转换为打字稿正则表达式?