我有一个JavaScript文件包含许多对象文本:
// lots of irrelevant code
oneParticularFunction({
key1: "string value",
key2: 12345,
key3: "strings which may contain ({ arbitrary characters })"
});
// more irrelevant code
我需要编写一些Python代码来提取这些文本。在
我的第一次尝试是正则表达式oneParticularFunction\(\{(.*?)\}\);
。但如果文本包含“}”,则此操作失败。在
既然我知道对象在一个有效的JavaScript文件中是有效的JSON(匹配的引号、大括号等),有没有更优雅的方法来提取它们呢?在
(换句话说,困难在于删除我不关心的所有其他JavaScript代码。)
编辑:最后,我对不包含子对象的任何对象使用正则表达式。。。在
^{pr2}$…用手追踪任何有嵌套的东西。在
为什么不编写一个状态机来读取{,并在every{上增加一个计数器,并用every}递减它,所以当它再次达到0时,取中间的所有字符,并使用python中的json解析器来检查它是否有效?这样,您就可以从语法错误中获得好处,而不是从regex中获得简单的match no match(记住python是{免费的,所以不可能出现误报)。在
我可以使用这个方法删除字符串中的所有方括号,而不会消除或不匹配外部的“({”和“})”
这里有三组人(我知道,很难说)。第一个是
(\(\{.*)
。它会找到你的({
,然后再找到它后面的任何东西,直到找到最里面的{
我们知道它是最里面的,因为第二组是
([^{}]*)
。这将匹配不是{
或}
的任何内容。在{{cd7>找到最里面的东西。在
整个匹配被这三个组重新组合在一起(去掉了
{}
)来代替。它重复这个过程,直到找不到更多匹配的大括号来替换。在如果还想替换
^{pr2}$()
,可以将其修改为正则表达式代码:
在https://regex101.com/r/bfNkvF/3处的regex的实时示例
要在Python中使用上一个regex,请执行以下操作:
^{pr2}$我在pythontutor上测试了这段代码,它似乎可以工作。你可以复制并粘贴到那里。告诉我它是否适用于其他对象文本。在
相关问题 更多 >
编程相关推荐