我想把这些线匹配起来
第1行:
,["0x3bad08fb87bc906f:0x74d6f6242d49ab18","SRI VIVEKANANDA MATRIC HIGHER SECONDARY SCHOOL Ambur (Spiritual, Modern Scientific Education)",null,[null,null,12.784799699999999,78.7137085]
第2行:
,["0x3bad08e4f337028d:0x5635e172ff9d7570","Sudha Nursery \u0026 Primary School",null,[null,null,12.7849528,78.7159848]
第3行:
,["0x3bad08e6a3dfe635:0x4ea2fcc42c9f7ce","As-Shukoor School",null,[null,null,12.7854174,78.7196367]
我的观察是,每行以逗号(,)开头,以方括号(])结尾,出现三次“null”,然后出现两个小数点从5到16的数字。 我只想提取引号内的字符串和末尾的两个带小数点的数字
我想了一点,但弄不清楚如何匹配引号,有时包括括号、pullstop、反斜杠、空格、逗号、减号、* 这是我完成了一半的表达式/模式
(r'^\,\[\"0x[0-9a-z]{16}:0x[0-9a-z]{16}\"\,\"(.*?)\"\,null\,\[null\,null\,(\d\d\.\d{5,16})\,(\d\d\.\d{5,16})\]')
但这不起作用。 非常感谢您的帮助
将此正则表达式与标志
re.M
一起使用:See Regex Demo
上述正则表达式中的大部分内容都很简单。为了匹配带引号的字符串,我假设字符串本身不包含
"
字符。所以我用。。。它匹配0个或更多双引号内的非#字符,并将这些字符放在捕获组1中。这是一个比
"(.*?)"
更有效的替代方案印刷品:
它将不匹配第3行,因为
0x4ea2fcc42c9f7ce
只包含15个“半字节”(半字节)更新
如果您假设每一行都应该匹配,并且您希望使用更宽松的正则表达式,因为行中可能存在一些变化(例如,插入的空格),那么您可能希望使用它(带有标志
re.M
):^
匹配行的开头[^[]*
匹配0个或多个非[
字符[
匹配一个[
"0x[a-f0-9]+:0x[a-f0-9]+"
匹配由:
分隔的任意长度的带引号的十六进制字符串[^"]*
匹配0个或多个非"
字符"([^"]*)"
匹配捕获组1中带引号的字符串\D*
匹配0个或多个非数字(\d+\.\d{5,16})
匹配捕获组2中的十进制数,
匹配一个,
(\d+\.\d{5,16})
匹配捕获组3中的十进制数See Regex Demo
印刷品
更新2
如果你真的想宽大些,假设每一行都应该匹配:
^
匹配行的开头[^"]*"[^"]*"
跳到并匹配第一个字符串[^"]*"([^"]*)"
跳到并匹配第二个字符串,并放入捕获组1\D*(\d+\.\d+)
跳到下一个数字并捕获捕获组2中的十进制数李>\D*(\d+\.\d+)
跳到下一个数字并捕获捕获组3中的十进制数李>相关问题 更多 >
编程相关推荐