正则表达式模式选择边界单词,不包括双引号内的单词

问题描述 投票:0回答:1

我放弃了!我在这里尝试了很多不同的事情,我剩下的头发也少了,所以如果有人能帮助我,我将不胜感激。

我有一些格式错误的 Json:

friend_in_need: {
    id: 3
    
    possible: {
        is_ironman: yes
        difficulty: {">": 1}
        has_start_date: {"<": "1936-01-02"}
        has_any_custom_difficulty_setting: no
        game_rules_allow_achievements: yes
    }
    
    happened: {
        has_country_flag: "achievement has joined faction"
    }
}

...我正在尝试使用正则表达式替换语句在各个步骤中进行清理。

我接下来要做的步骤是匹配每个键和字符串值,以便我在它们周围添加双引号,如下所示:

"friend_in_need": {
    "id": 3
    
    "possible": {
        "is_ironman": "yes"
        "difficulty": {">": 1}
        "has_start_date": {"<": "1936-01-02"}
        "has_any_custom_difficulty_setting": "no"
        "game_rules_allow_achievements": "yes"
    }
    
    "happened": {
        "has_country_flag": "achievement has joined faction"
    }
}

我尝试了各种不同的方法,首先对键进行了一些成功的排序,但是我找不到一种方法来选择字符串值,排除那些已经在引号中的值。如果有必要,我很乐意分多个步骤来完成此操作。

例如,我知道这些部分让我更接近..

(?:\".+?\")
匹配括号内的所有内容
\b([a-zA-Z0-9@_]+)\b
匹配边界词 \S 可能会更好

但我无法将两者结合起来以与第一个不匹配。我以为这会起作用,但事实并非如此:

(?!(?:\".+?\")))\b([a-zA-Z0-9@_]+)\b

任何帮助将不胜感激。

提前致谢!

json regex double-quotes
1个回答
0
投票

您可以通过使用负lookbehind和负lookahead标记来实现这一点。如果你使用了类似 -

的东西
(?<![\"\w])\w+(?![\"\w])

它将匹配前面没有其他单词字符或

"
并且后面没有其他单词字符或
"

的所有单词字符组

您可以根据需要替换中间的

\w+
,以更好地适合您的用例

© www.soinside.com 2019 - 2024. All rights reserved.