找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 85|回复: 0

如何使用正则表达式提取json字段?

[复制链接]

2万

主题

162

回帖

18万

积分

管理员

积分
184732
发表于 2022-8-7 00:20:37 | 显示全部楼层 |阅读模式 IP:山东省临沂市 移动

登录后更精彩...O(∩_∩)O...

您需要 登录 才可以下载或查看,没有账号?立即注册

×
如何使用正则表达式提取json字段?

初学者RegExp问题.我在文本文件中有JSON行,每个都有稍微不同的Fields,但如果有的话,我想为每行提取3个字段,忽略其他所有字段.我如何使用正则表达式(在编辑板或其他任何地方)执行此操作?
例:
[JavaScript] 纯文本查看 复制代码
"url":"http://www.netcharles.com/orwell/essays.htm",
"domain":"netcharles.com",
"title":"Orwell Essays & Journalism Section - Charles' George Orwell Links",
"tags":["orwell","writing","literature","journalism","essays","politics","essay","reference","language","toread"],
"index":2931,
"time_created":1345419323,
"num_saves":24
我想提取URL,TITLE,TAGS,
我想这就是你所要求的.我会暂时提供一个解释.这个正则表达式(由/ - 您可能不必将它们放在编辑板中)分隔匹配:
"
文字".
(url|title|tags)
正则表达式中的三个文字字符串"url","title"或"tags"中的任何一个 - 默认情况下,括号用于创建组,管道字符用于交替 - 如逻辑"或".要匹配这些文字字符,您必须转义它们.
":"
另一个文字字符串.
(
另一组的开始.(第2组)
    (
另一组(3)
        \\"
文字字符串\"- 你必须转义反斜杠,否则它将被解释为转义下一个字符,你永远不会知道它会做什么.
        |
要么...
        [^"]
除双引号外的任何单个字符括号表示字符类/集,或匹配的字符列表.任何给定的类都匹配字符串中的一个字符.^在类的开头使用carat()会否定它,导致匹配器匹配类中未包含的任何内容.
    )
第3组结束......
    *
星号导致前一个正则表达式(在本例中为第3组)重复零次或多次,在这种情况下,使匹配器匹配任何可能在JSON字符串的双引号内的内容.
)"
第2组结束,以及文字".
我在这里做了一些非显而易见的事情,可能会派上用场:
  • 第2组 - 使用反向引用取消引用时- 将是分配给该字段的实际字符串.获取实际值时这很有用.
  • 表达式末尾的i使其不区分大小写.
  • 第1组包含捕获字段的名称.
编辑:所以我看到标签是一个数组.当我有机会思考它时,我会在一秒钟内更新正则表达式.
你的新正则表达式是:
/"(url|title|tags)""(\\"|[^"])*"|\[("(\\"|[^"])*"(,"(\\"|[^"])*")*)?\])/i
我在这里所做的就是替换我一直在使用的字符串正则表达式("((\\"|[^"])*)"),以及用于查找数组(\[("(\\"|[^"])*"(,"(\\"|[^"])*")*)?\])的正则表达式.没有那么容易阅读,是吗?好吧,我们将字符串正则表达式替换为字母S,我们可以将其重写为:
\[(S(,S)*)?\]
它匹配文字左括号(因此是反斜杠),可选地后跟逗号分隔的字符串列表和结束括号.我在这里介绍的唯一新概念是问号(?),它本身就是一种重复.通常称为"使前一个表达式可选",它也可以被认为是0或1个匹配.
使用相同的S表示法,这是整个脏的正则表达式:
/"(url|title|tags)"S|\[(S(,S)*)?\])/i
如果它有助于看到它的实际效果,那么这就是它的实际应用.

这个问题有点老了,但我在我的电脑上浏览了一下,发现了那个表达。我通过他作为 GIST,可能对其他人有用。
编辑:





回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|哩布大模型|Civitai大模型|IP定位|图反推|站长素材|deepseek|即梦视频|阿狗工具|花瓣网|pinterest|php手册|宝塔文档|CyberChef|猫捉鱼铃|手机版|小黑屋|下载狗|IPS|在线工具|分享屋 ( 鲁ICP备2021028754号 )

GMT+8, 2025-5-5 05:07

Powered by 分享屋 X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表