Python 42c9f7ce,“作为舒库尔学派”,空,[空,空,12.7854174,78.7196367] """ rex=re.compile(r'^,\[“0x[a-f0-9]{16}:0x[a-f0-9]{16}”,([^]*),null,\[null,null,(\d+\.\d{5,16}),(\d+\.\d{5,16})\]$,re.M) 对于rex.finditer中的m(行): 打印(m[1],m[2],m[3])
印刷品:Python 42c9f7ce,“作为舒库尔学派”,空,[空,空,12.7854174,78.7196367] """ rex=re.compile(r'^,\[“0x[a-f0-9]{16}:0x[a-f0-9]{16}”,([^]*),null,\[null,null,(\d+\.\d{5,16}),(\d+\.\d{5,16})\]$,re.M) 对于rex.finditer中的m(行): 打印(m[1],m[2],m[3]),python,regex,Python,Regex,印刷品: SRI VIVEKANANDA MATRIC HIGHER SECONDARY SCHOOL Ambur (Spiritual, Modern Scientific Education) 12.784799699999999 78.7137085 Sudha Nursery & Primary School 12.7849528 78.7159848 它将不匹配第3行,因为0x4EA2FC42C9F7CE仅包含15个“半字节”(半字节) 更新 如果您假设每一行都应该匹配,并且
SRI VIVEKANANDA MATRIC HIGHER SECONDARY SCHOOL Ambur (Spiritual, Modern Scientific Education) 12.784799699999999 78.7137085
Sudha Nursery & Primary School 12.7849528 78.7159848
它将不匹配第3行,因为0x4EA2FC42C9F7CE
仅包含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中的十进制数重新导入
行=“”,[“0x3bad08fb87bc906f:0x74d6f6242d49ab18”,“斯里兰卡维维卡南达母校高中Ambur(精神,现代科学教育)”,空,[空,空,12.7847999999,78.7137085]
,[“0x3bad08e4f337028d:0x5635e172ff9d7570”,“苏达托儿所\u0026小学”,空,[空,空,12.7849528,78.7159848]
,[“0x3bad08e6a3dfe635:0x4ea2fcc42c9f7ce”,“作为舒库尔学派”,null,[null,null,12.7854174,78.7196367]
"""
rex=re.compile(r'^,[^[]*\[“0x[a-f0-9]+:0x[a-f0-9]+“[^”]*”([^”]*)“\D*(\D+\.\D{5,16}),(\D+\.\D{5,16})”,re.M)
对于rex.finditer中的m(行):
打印(m[1],m[2],m[3])
印刷品
SRI VIVEKANANDA MATRIC HIGHER SECONDARY SCHOOL Ambur (Spiritual, Modern Scientific Education) 12.784799699999999 78.7137085
Sudha Nursery & Primary School 12.7849528 78.7159848
As-Shukoor School 12.7854174 78.7196367
更新2
如果你真的想宽大些,假设每一行都应该匹配:
^[^"]*"[^"]*"[^"]*"([^"]*)"\D*(\d+\.\d+)\D*(\d+\.\d+)
^
匹配行首[^”]*“[^”]*”
跳到并匹配第一个字符串[^“]*”([^“]*)”
跳到并匹配第二个字符串并放入捕获组1\D*(\D+\.\D+
跳到下一位并捕获捕获组2中的十进制数\D*(\D+\.\D+
跳到下一位并捕获捕获组3中的十进制数重新导入
行=“”,[“0x3bad08fb87bc906f:0x74d6f6242d49ab18”,“斯里兰卡维维卡南达母校高中Ambur(精神,现代科学教育)”,空,[空,空,12.7847999999,78.7137085]
,[“0x3bad08e4f337028d:0x5635e172ff9d7570”,“苏达托儿所\u0026小学”,空,[空,空,12.7849528,78.7159848]
,[“0x3bad08e6a3dfe635:0x4ea2fcc42c9f7ce”,“作为舒库尔学派”,null,[null,null,12.7854174,78.7196367]
"""
rex=re.compile(r'^[^“]*“[^”]*“[^”]*”([^“]*)“\D*(\D+\.\D+\D*(\D+\.\D+.*$”,re.M)
对于rex.finditer中的m(行):
打印(m[1],m[2],m[3])
谢谢@Booboo。说真的,我甚至没有注意到第3行有15个字节,继续认为每行有16个。如果我也要第3行呢?好吧,如果唯一的可能性是15和16,那么r'^,\[[0x[a-f0-9]{16}:0x[a-f0-9]{15,16}…等等。
如果你不确定或者你想放松条件r'^,\[[0x[a-f0-9]+:0x[a-f0-9]+…等等。
,每个只表示1个或更多。请注意,以上基于您的正则表达式,就格式而言需要非常严格的遵守。我将使用更宽松的内容更新答案。请参阅更新的答案。谢谢@Booboo。说真的,我甚至没有注意到第3行有15个半字节,继续思考每一行had 16.如果我也想要第3行呢?如果唯一的可能性是15和16,那么r'^,\[“0x[a-f0-9]{16}:0x[a-f0-9]{15,16}…等等。
如果你不确定或者你想放松条件r'^,\[“0x[a-f0-9]+:0x[a-f0-9]+…等等。
,每个只表示一个或多个。请注意,以上基于您的正则表达式,就格式而言需要非常严格的遵守。我将使用更宽松的内容更新答案。请参阅更新的答案。
^,[^[]*\["0x[a-f0-9]+:0x[a-f0-9]+"[^"]*"([^"]*)"\D*(\d+\.\d{5,16}),(\d+\.\d{5,16})
SRI VIVEKANANDA MATRIC HIGHER SECONDARY SCHOOL Ambur (Spiritual, Modern Scientific Education) 12.784799699999999 78.7137085
Sudha Nursery & Primary School 12.7849528 78.7159848
As-Shukoor School 12.7854174 78.7196367
^[^"]*"[^"]*"[^"]*"([^"]*)"\D*(\d+\.\d+)\D*(\d+\.\d+)