正则表达式代码:是否包含字符

时间:2018-09-20 13:22:30

标签: regex vb.net

我不知道这一点。我想捕获方括号内的字符串,无论其中是否包含字符。

[5123512], [412351, 1235123, 5125123], [12312-AA] and []

我想将方括号转换为双引号

[5123512] ==> "5123512"
[412351, 1235123, 5125123] ==> "412351, 1235123, 5125123"

[12312-AA] ==> "12312-AA"
[] == > ""

我尝试了这个\[\d+\],但没有用

这是我的示例数据,它是json格式。 描述内的方括号不必更改,只需更改属性即可。

{"results":
[{"listing": 4613456431,"sku": [5123512],"category":[412351, 1235123, 
5125123],"subcategory": "12312-AA", "description":"This is [123sample]"} 
{"listing": 121251,"sku":[],"category": [412351],"subcategory": "12312-AA", 
"description": "product sample"}]}

TIA

2 个答案:

答案 0 :(得分:1)

您的正则表达式无法正常运行有以下三个原因:

  1. [是一个打开字符类的元字符。要匹配文字[,您需要使用反斜杠对其进行转义。 ]也是跟随[元字符的元字符,但是如果您转义[,则不必转义](不是这样做很痛苦。)

  2. \d仅捕获十进制数字,但是示例中包含字母A。如果是十六进制数字,则可能要使用[\dA-F]而不是\d,或者[\dA-Fa-f](如果可以小写找到数字)。如果可以是任何字母,则可以根据需要匹配小写字母而使用[\dA-Z][\dA-Za-z]

  3. +表示“一个或多个事件”,因此它与空的[]不匹配。改用*“ 0个或多个事件”量词。

另外,您可能需要捕获(capturing group)中的数字序列,以便能够在替换模式中引用它。

但是,正如Andrew Morton所建议的那样,看来您应该能够使用纯文本搜索/替换。

答案 1 :(得分:1)

首先,正则表达式是一种用于解析JSON格式数据的可怕工具。我敢肯定,您会发现有很多工具可以简单地在vb.net中读取JSON并以比将其作为文本的方式更简单的方式进行处理...例如:How to parse json and read in vb.net

原始答案(略有修改):

您快到了,但是您需要更改以下几项内容:

  • 在您的正则表达式模式中,跳出方括号\[\]
  • 如果您只想捕获方括号中的所有字符,那么.是一个不错的选择
  • 加号+的意思是“至少一个”-如果您也想匹配空括号,请改用*?
    • 问号的意思是“懒惰”-它明确告诉正则表达式匹配尽可能短的字符序列(而不是转到下一个方括号...)
  • .*?括在括号中,以便稍后在替换内容时可以引用该部分。
  • 最后,要替换的输出值/模式是\1$1,具体取决于上下文
    • "\1""$1",如果您确实需要在输出中使用双引号-也许只需要一个字符串变量?

所有这些变为:

  

查找此内容:\[(.*?)\]

     

替换为:\1