gpt4 book ai didi

正则表达式替换 JSON 中的斜线

转载 作者:行者123 更新时间:2023-12-03 21:38:49 25 4
gpt4 key购买 nike

我有一些正在解析的 JSON,如下所示:

{
"dhkplhfnhceodhffomolpfigojocbpcb": {
"external_crx": "C:\Program Files\Babylon\Babylon-Pro\Utils\BabylonChrome.crx",
"external_version": "1.1"
}
}

不幸的是,由于单斜杠,JSON.NET 确实给我一个错误。有没有办法允许单斜杠?如果不是,我可以使用什么正则表达式以安全的方式双斜杠文件路径,而不会弄乱可能具有正确双斜杠的其他条目?

更新 错误(使用 JsonTextReader)是“错误的 JSON 转义序列:\P。第 4 行,位置 25。”事实证明,在这个问题上还有更多值得关注的地方,因为那里的反斜杠支持十六进制和八进制值 (http://json.codeplex.com/discussions/244265)。当我查看的是十六进制/八进制而不仅仅是文件路径反斜杠时,我怎么知道有人忘记了双反斜杠?

                case 'u':
// ...
case 'x':
hexValues = new char[2];
for (int i = 0; i < hexValues.Length; i++)
{
if ((currentChar = MoveNext()) != '\0' || !_end)
hexValues[i] = currentChar;
else
throw CreateJsonReaderException("Unexpected end while parsing unicode character. Line {0}, position {1}.", _currentLineNumber, _currentLinePosition);
}

hexChar = Convert.ToChar(int.Parse(new string(hexValues), NumberStyles.HexNumber, NumberFormatInfo.InvariantInfo));
_buffer.Append(hexChar);
break;

default:
var octValues = new char[3];
var octLength = 0;
for (int i = 0; i < octValues.Length; i++)
{
var octalChar = i==0 ? currentChar : PeekNext();
if ((octalChar > 1 || !_end) && octalChar>='0' && octalChar<'8')
{
octValues[i] = (char)octalChar;
if(i!=0) MoveNext();
octLength++;
}
else
{
break;
}
}
if (octLength>0)
{
hexChar = Convert.ToChar(Convert.ToInt32(new string(octValues, 0, octLength), 8));
_buffer.Append(hexChar);
break;
}

throw CreateJsonReaderException("Bad JSON escape sequence: {0}. Line {1}, position {2}.", @"\" + currentChar, _currentLineNumber, _currentLinePosition);
}
}
else
{
throw CreateJsonReaderException("Unterminated string. Expected delimiter: {0}. Line {1}, position {2}.", quote, _currentLineNumber, _currentLinePosition);
}
break;

最佳答案

要用双反斜杠替换单反斜杠,但保留现有的双反斜杠,搜索

(?<!\\)\\(?!\\)

并将其替换为

\\\\

对于 C#,RegexBuddy 创建了这个代码片段:

resultString = Regex.Replace(subjectString, 
@"(?<!\\) # lookbehind: Check that previous character isn't a \
\\ # match a \
(?!\\) # lookahead: Check that the following character isn't a \",
@"\\", RegexOptions.IgnorePatternWhitespace);

关于正则表达式替换 JSON 中的斜线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7247712/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com