c# - 正则表达式检索第二个捕获组

标签 c# regex json

我有以下字符串(CrLf 可能插入到 {}() 之外)

{item1}, {item2} (2), {item3}    (4),  {item4}
(1), {item5},{item6}(5)

我正在尝试将每个项目与其组件分开,并使用正则表达式从中创建一个 JSON。

输出应该是这样的

{"name":"item1", "count":""}, {"name":"item2", "count":""}, {"name":"item3", "count":""}, {"name":"item4", "count":""}, {"name":"item5", "count":""},{"name":"item6", "count":""}

到目前为止,我有以下 regex,但它没有捕获第二组。

\{(.[^,\n\]]*)\}\s*[\((.\d)\)]*

我正在用

替换匹配项
{\"name\":\"${1}\", \"count\":\"${2}\"}

这是我的 test link

我做错了什么?

第二个问题

是否可以将没有计数的项目更改为零,以便我的第二个捕获组读取为 0?

例如,与其将 {item1} 更改为 {"name":"item1", "count":""},不如将其更改为 {"name":"item1", "count":"0"}

最佳答案

您的第二个捕获组对于捕获数字信息无效,即 [\((.\d)\)] 这就是什么都没有被捕获的原因。另外,它是 recommended捕获数字时使用 [0-9] 因为 \d 也可以捕获不需要的 unicode 定义的字符。

以下正则表达式将仅捕获 2 个组(与 @revo 的答案不同,后者捕获中间不必要的组)

\{(.[^,\n\]]*)\}(?:\s*\(([0-9]+)\))?

至于第二个要求,正则表达式用于从现有数据中捕获信息,据我所知,不可能注入(inject)不存在的信息。最简单的方法是在运行正则表达式后修复 JSON。

或者,您可以在替换的开头包含一个 0,这样任何空捕获的值将始终为 0,并且任何捕获的值仍将是有效的,但只需在开头包含一个 0,例如04/035

{\"name\":\"$1\", \"count\":\"0$2\"}

关于c# - 正则表达式检索第二个捕获组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28514314/

相关文章:

c# - 您如何确保 .Net 始终从 namespace 树的根部搜索 namespace ?

c# - 为什么我需要任何 Saga 存储?

c# - 如何在 C# 中编写文件系统观察程序?

java - 正则表达式分割遵循 ABNF 形式的字符串

regex - 如何在 Visual Studio 或 SSMS "Find and Replace"中找到带有正则表达式模式的 {min,max} 重复?

C# asp.net MySQL 值返回为 Null

regex - r? .在scala中的含义

python - 如何将另一个python脚本(.py)导入主python文件

java - 我如何使用带有 json 参数的curl 调用Web 服务?

java - 使用 spring 中的 Rest 模板通过 post 调用发送 json 数据