我正在寻找帮助,以创建一个正则表达式,可以得到一个特定的文本后,一个给定的字符串使用Python。你知道吗
我试图从一个页面中提取一个JSON,它是这样的:
var config = {aslkdjsakljdkalsj{asdasdas}askldjaskljd};
我需要一个正则表达式,它可以从第一个{到}=>;而不需要分号
我试过用
config = .*?(?=\}\;)
但是输出是
config = {sadasdasdas{a}asdasdasd
它获取config =
部分,而不获取最后的}
。你知道吗
我该怎么修?你知道吗
如果JS there的行保证在终止的
;
之前不包含换行符,那么问题就足够简单了-匹配var config =
,然后是在组中捕获的非换行符,然后匹配分号和行尾。例如,如果JSON用'
分隔,那么使用提取第一组。你知道吗
如果JSON不能保证它是独立的,那么它就要复杂得多。解析像JSON这样的嵌套结构是很困难的-用正则表达式解决一般问题的唯一方法是如果结构是事先知道的(通常不是这样,并且可能需要模式中的大量重复代码),或者如果使用的RE引擎支持递归匹配。如果没有这些,就没有办法表示需要一个在模式中有
}
个数的{
个数的平衡的^{。你知道吗幸运的是,如果您使用的是Python,即使Python的原生REs不支持递归,也有一个regex module可用。您还需要确保JSON中字符串中的
{
和}
不会影响当前的嵌套级别。对于原始字符串,需要一个捕获组的外部是
匹配所需的行和字符串分隔符,并捕获一组
意思是-
{
,后跟任意数:或"(?:\\|\\"|[^"])*"
-匹配JSON中的字符串(键或值),从其起始分隔符到结束分隔符,忽略转义的"
,或[^{}]
-匹配任何不是{
或}
的字符-可以忽略其他字符,因为我们只想获得正确的嵌套级别,或者(?1)
-递归整个第一个捕获组(与{ ... }
匹配的捕获组)这将确保
{
}
括号被模式的结尾平衡。你知道吗但是-上面是一个使用
String.raw
的示例,其中Javascript代码中的文字反斜杠表示字符串中的文字反斜杠。另一方面,使用'
分隔符时,文本反斜杠需要在JS中转义,因此上面的输入如下所示还需要对图案中的反斜杠进行双转义:
https://regex101.com/r/8rSrGf/1
这很复杂。如果可能的话,我建议使用第一种方法或者是一种变体。你知道吗
相关问题 更多 >
编程相关推荐