Jam*_*per 6 regex text json replace editpad
初学者RegExp问题.我在文本文件中有JSON行,每个都有稍微不同的Fields,但如果有的话,我想为每行提取3个字段,忽略其他所有字段.我如何使用正则表达式(在编辑板或其他任何地方)执行此操作?
例:
"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
Run Code Online (Sandbox Code Playgroud)
我想提取URL,TITLE,TAGS,
Fra*_*Man 18
/"(url|title|tags)":"((\\"|[^"])*)"/i
Run Code Online (Sandbox Code Playgroud)
我想这就是你所要求的.我会暂时提供一个解释.这个正则表达式(由/ - 您可能不必将它们放在编辑板中)分隔匹配:
"
Run Code Online (Sandbox Code Playgroud)
文字".
(url|title|tags)
Run Code Online (Sandbox Code Playgroud)
正则表达式中的三个文字字符串"url","title"或"tags"中的任何一个 - 默认情况下,括号用于创建组,管道字符用于交替 - 如逻辑"或".要匹配这些文字字符,您必须转义它们.
":"
Run Code Online (Sandbox Code Playgroud)
另一个文字字符串.
(
Run Code Online (Sandbox Code Playgroud)
另一组的开始.(第2组)
(
Run Code Online (Sandbox Code Playgroud)
另一组(3)
\\"
Run Code Online (Sandbox Code Playgroud)
文字字符串\"- 你必须转义反斜杠,否则它将被解释为转义下一个字符,你永远不会知道它会做什么.
|
Run Code Online (Sandbox Code Playgroud)
要么...
[^"]
Run Code Online (Sandbox Code Playgroud)
除双引号外的任何单个字符括号表示字符类/集,或匹配的字符列表.任何给定的类都匹配字符串中的一个字符.^在类的开头使用carat()会否定它,导致匹配器匹配类中未包含的任何内容.
)
Run Code Online (Sandbox Code Playgroud)
第3组结束......
*
Run Code Online (Sandbox Code Playgroud)
星号导致前一个正则表达式(在本例中为第3组)重复零次或多次,在这种情况下,使匹配器匹配任何可能在JSON字符串的双引号内的内容.
)"
Run Code Online (Sandbox Code Playgroud)
第2组结束,以及文字".
我在这里做了一些非显而易见的事情,可能会派上用场:
编辑:所以我看到标签是一个数组.当我有机会思考它时,我会在一秒钟内更新正则表达式.
你的新正则表达式是:
/"(url|title|tags)":("(\\"|[^"])*"|\[("(\\"|[^"])*"(,"(\\"|[^"])*")*)?\])/i
Run Code Online (Sandbox Code Playgroud)
我在这里所做的就是替换我一直在使用的字符串正则表达式("((\\"|[^"])*)"),以及用于查找数组(\[("(\\"|[^"])*"(,"(\\"|[^"])*")*)?\])的正则表达式.没有那么容易阅读,是吗?好吧,我们将字符串正则表达式替换为字母S,我们可以将其重写为:
\[(S(,S)*)?\]
Run Code Online (Sandbox Code Playgroud)
它匹配文字左括号(因此是反斜杠),可选地后跟逗号分隔的字符串列表和结束括号.我在这里介绍的唯一新概念是问号(?),它本身就是一种重复.通常称为"使前一个表达式可选",它也可以被认为是0或1个匹配.
使用相同的S表示法,这是整个脏的正则表达式:
/"(url|title|tags)":(S|\[(S(,S)*)?\])/i
Run Code Online (Sandbox Code Playgroud)
如果它有助于看到它的实际效果,那么这就是它的实际应用.
这个问题有点老了,但我在我的电脑上浏览了一下,发现了那个表达。我通过他作为 GIST,可能对其他人有用。
编辑:
# Expression was tested with PHP and Ruby
# This regular expression finds a key-value pair in JSON formatted strings
# Match 1: Key
# Match 2: Value
# https://regex101.com/r/zR2vU9/4
# http://rubular.com/r/KpF3suIL10
(?:\"|\')(?<key>[^"]*)(?:\"|\')(?=:)(?:\:\s*)(?:\"|\')?(?<value>true|false|[0-9a-zA-Z\+\-\,\.\$]*)
# test document
[
{
"_id": "56af331efbeca6240c61b2ca",
"index": 120000,
"guid": "bedb2018-c017-429E-b520-696ea3666692",
"isActive": false,
"balance": "$2,202,350",
"object": {
"name": "am",
"lastname": "lang"
}
}
]
Run Code Online (Sandbox Code Playgroud)
您想要从中提取字段值的 json 字符串
{"fid":"321","otherAttribute":"value"}
Run Code Online (Sandbox Code Playgroud)
以下正则表达式精确提取“fid”字段值“321”
(?<=\"fid\":\")[^\"]*
Run Code Online (Sandbox Code Playgroud)